Manipulación de cadenas de bash

Manipulación de cadenas de bash
En Bash, no muy diferente a ningún otro lenguaje de programación, un programa vive para poner las cosas en cubos y nombrarlas para su uso posterior. Estos cubos están disponibles para manipular a lo largo de la vida del programa o hasta que se discordan manualmente o se consideren ya no es necesario. El programa vive para manipular cubos.

Lo que se conoce anteriormente como cubos es lo que llamamos variables en la mayoría de los lenguajes de programación. Además, se basa en el concepto básico de una variable, se introduce un concepto que llamamos tipificación.

La escritura es un nombre para el comportamiento esperado de almacenamiento y asignación de una variable. Entonces, ¿cómo se ve esto cuando volvemos a los cubos??

En el pequeño mundo de los cubos, hemos creado para nuestros programas, los cubos tienen nombres. Eso es todo.

Ahora suponga que nuestros programas no tienen el lujo de tener un número infinito de bolsas de Jetson a su disposición para usar como cubos. Antes de que se nombre un balde y se llene de su contenido, el programa debe decidir la forma y la constitución de cada cubo que toca. Sé que parece un poco exagerado, pero es un mal necesario. Todos los cubos están obligados por su tipo.

Manipulación de cuerdas en Bash

¿Cómo se ve esto cuando volvemos a Bash??

Funciones, matrices y cuerdas se almacenan en variables. Bash usa lo que llamamos atributos a los cambios de bandera en los comportamientos en la asignación. A pesar de que hay un sistema para modificar el comportamiento de la asignación variable, cuando todo se reduce a él, los valores se almacenan en variables como cadenas.

En Bash, un programa vive para poner cadenas en variables y nombrarlas para su uso posterior. Estas cadenas están disponibles para manipular a lo largo de la vida del programa. El programa vive para manipular cuerdas.

Aquí cubriremos la manipulación de cuerdas de Bash en la respiración y la mayor profundidad posible para ser accesibles para los lectores de todas las marcas y formas. Seguir leyendo.

¿Qué es la manipulación de la cadena en Bash?

La manipulación de la cadena es una operación en una cadena que cambia su contenido. En Bash, la manipulación de la cadena viene en dos formas: manipulación de cadenas de bash puro y manipulación de cadenas a través de comandos externos. Aquí tocaremos ambos tipos de manipulación de cadenas.

Supongamos que tenemos una variable en Bash que contiene una cadena, deseamos manipular la cadena llamada. En el caso de que exista más de una cadena, nombramos la cadena de cadenas, String2, ... también, podemos optar por nombrar una cadena algo más significativo que la cadena para promover la comprensión del contenido de la cadena y el uso previsto.

Concatenate Strings - Listado de cadenas en una cadena

En Bash, la manera fácil de concatenar cadenas es enumerar las cuerdas en orden. La cadena resultante es una nueva cadena que contiene todas las cadenas enumeradas.

$ String1 $ String2 ..

Ejemplo: Concatenación de cadena mediante listado de cadenas en cadena


String = "One";
string2 = "dos";
string3 = $ String $ String2;
echo $ string3

Producción

uno dos

Listado de cuerdas en una matriz

En Bash, otra forma de concatenar cadenas es enumerar las cadenas en una matriz y usar la expansión de los parámetros para expandir la matriz a la cadena concatenada. Sin embargo, a diferencia del ejemplo anterior, eliminar el espacio en blanco que separa los elementos de la matriz puede requerir trabajo adicional.

Array ($ Strings $ Strings2 ...)

Ejemplo: Concatenación de cadenas al enumerar cadenas en una matriz


cadenas = ("one" "dos");
echo $ cadenas [@]

Producción

uno dos

Acortar una cadena: cambie una cadena a la izquierda

Una forma de acortar una cadena es cambiar su contenido a la izquierda. El contenido de la cadena desplazado hacia la izquierda desaparece, lo que resulta en una cadena más corta.

Ejemplo: desplazar el bucle izquierdo


string = "abcdefghijklmnopqrstuvwxyz";
para i en $ (seq 0 $ (($ #string - 1)));
hacer
echo $ string: $ i;
hecho

Producción

ABCDEFGHIJKLMNOPQRSTU VWXYZ
bcdefghijklmnopqrstuvwxyz
CDEFGHIJKLMNOPQRSTUVWXYZ
defghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
fghijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
hijklmnopqrstuvwxyz
ijklmnopqrstuvwxyz
jklmnopqrstuvwxyz
klmnopqrstuvwxyz
lmnopqrstuvwxyz
mnopqrstuvwxyz
nopqrstuvwxyz
opqrstuvwxyz
pqrstuvwxyz
qrstuvwxyz
rstuvwxyz
stuvwxyz
tuvwxyz
uvwxyz
V W X Y Z
W x Y Z
xyz
yz
z

Cambiar una cadena hacia la derecha, obtener una subcadena de cadena

Otra forma de acortar una cadena en Bash es obtener la subcadena de una cadena. La operación resultante se puede utilizar para implementar una operación de cambio a la derecha similar al método anterior.

Ejemplo: desplazar el bucle derecho


string = "abcdefghijklmnopqrstuvwxyz";
para i en $ (seq 0 $ (($ #string - 1)));
hacer
echo $ string: 0: $ #string -i;
hecho

Producción

ABCDEFGHIJKLMNOPQRSTU VWXYZ
abcdefghijklmnopqrstuvwxy
abcdefghijklmnopqrstuvwx
abcdefghijklmnopqrstuvw
abcdefghijklmnopqrstuv
abcdefghijklmnopqrstu
abcdefghijklmnopqrst
abcdefghijklmnopqrs
abcdefghijklmnopqr
abcdefghijklmnopq
abcdefghijklmnop
abcdefghijklmno
abcdefghijklmn
abcdefghijklm
abcdefghijkl
abcdefghijk
abcdefghij
abcdefghi
abcdefgh
abcdefg
a B C D e F
a B C D e
a B C D
a B C
abundante
a

Ejemplo: Pyramid de bucle de cambio

Para diversión, combinemos los dos ejemplos de bucle de cambio anteriores para dibujar un paso en nuestro terminal.

Ejemplo: paso de bucle de cambio


string = "abcdefghijklmnopqrstuvwxyz";

para i en $ (seq 0 $ (($ #string - 1)));
hacer
echo $ string: 0: $ #string -i;
hecho
| tac;

para i en $ (seq 0 $ (($ #string - 1)));
hacer
echo $ string: $ i;
hecho

Producción

a
abundante
a B C
a B C D
a B C D e
a B C D e F
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
abcdefghijkl
abcdefghijklm
abcdefghijklmn
abcdefghijklmno
abcdefghijklmnop
abcdefghijklmnopq
abcdefghijklmnopqr
abcdefghijklmnopqrs
abcdefghijklmnopqrst
abcdefghijklmnopqrstu
abcdefghijklmnopqrstuv
abcdefghijklmnopqrstuvw
abcdefghijklmnopqrstuvwx
abcdefghijklmnopqrstuvwxy
ABCDEFGHIJKLMNOPQRSTU VWXYZ
ABCDEFGHIJKLMNOPQRSTU VWXYZ
bcdefghijklmnopqrstuvwxyz
CDEFGHIJKLMNOPQRSTUVWXYZ
defghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
fghijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
hijklmnopqrstuvwxyz
ijklmnopqrstuvwxyz
jklmnopqrstuvwxyz
klmnopqrstuvwxyz
lmnopqrstuvwxyz
mnopqrstuvwxyz
nopqrstuvwxyz
opqrstuvwxyz
pqrstuvwxyz
qrstuvwxyz
rstuvwxyz
stuvwxyz
tuvwxyz
uvwxyz
V W X Y Z
W x Y Z
xyz
yz
z

Capitalizar toda la cuerda en Bash

En Bash4 o posterior puede capitalizar los caracteres imprimibles utilizando la expansión de los parámetros de la siguiente manera.

$ String ^^

Supongamos que lanzamos las primeras 10 palabras de la salida del ejemplo del paso del bucle de desplazamiento en una variable llamada Pyramid. Tenga en cuenta que no modificado, el comportamiento esperado de hacer eco de su contenido es el siguiente.

Dominio


Pyramid = "A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ"
Echo $ Pyramid

Producción

A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ

Tenga en cuenta que, como era de esperar, no hay tapas. Vamos a explotar. Es decir, vamos a hacer todos sus personajes.

Dominio

echo $ Pyramid ^^

Producción

A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ

Eso fue fácil! ¿Qué tal si solo queremos convertir la primera letra en una cadena a tapas como una oración?? Si podemos! Todo lo que necesitamos hacer es probar un poco menos duro, un personaje menos para ser exactos.

Capitalizar solo la primera letra en una cadena

Tal vez capitalizar toda la cadena no es la técnica de manipulación de cadenas de bash que está buscando. ¿Qué pasa si solo necesita capitalizar la primera carta como una oración??

Comandos

Pyramid = "A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ"
echo $ Pyramid^

Producción

A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ

Ahora suponga que estamos más interesados ​​en convertir cadenas en minúsculas. Afortunadamente, hay una forma pura de hacer esto; es decir, utilizar la expansión de los parámetros.

Convierta toda la cuerda en minúsculas en Bash

Convierta una cadena a todos en minúsculas en BASH utilizando el operador de expansión de parámetros de doble comercio (",,").

Comandos


Pyramid = "A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ";
echo $ Pyramid;
Echo $ Pyramid ,,

Producción

A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ
A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ

Convierta solo la primera letra en una cadena en minúsculas

Convierta el primer carácter en una cadena en minúsculas en BASH utilizando el operador de expansión de parámetros individuales (",").

Comandos


Pyramid = "A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ";
echo $ Pyramid;
Echo $ Pyramid,

Producción

A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ
A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ

Asigne una cadena vacía un valor y devuelva su valor

A menudo desea establecer una devolución de retroceso para una cadena vacía y hacer que su valor persista a lo largo de un script bash, como el caso, cuando se acepta opcionalmente las variables del entorno. Esto se puede lograr utilizando la expansión de los parámetros.

Comandos


echo [$ str];
echo [$ str: = vacía];
echo [$ str]

Producción

[]
[vacío]
[vacío]

Notas: se supone que STR no está asignado

Reemplace un patrón que ocurra en una cadena una vez en Bash

Tenemos una cuerda sentada en una variable y queremos reemplazar la primera aparición de una subcadena. Así es cómo.

Uso básico

$ str/patrón/reemplazo

Comandos


str = "01101100011010010110111001110101111000011010000110100101101110011101000010111
0011000110110111101101101 ";
echo $ str;
Echo $ str/111/000

Producción

0110110001101001011011100111010101111000011010000110100101101110011101
0000101110011000110110111101101101
0110110001101001011000000000010100001000011010000110100101100000000001
0000100000011000110110000101101101

Reemplace todas las ocurrencias de un patrón en una cadena en Bash

Tenemos una cadena en una variable y queremos reemplazar todas las ocurrencias de una subcadena. Así es cómo.

Uso básico

$ str // patrón/reemplazo

Comandos


str = "0110110001101001011011100111010111100001101000011010010110111001110
10000101110011000110110111101101101 ";
echo $ str;
echo $ str // 111/000

Producción

01101100011010010110111001110101011110000110100001101001011011100
111010000101110011000110110111101101101
011011000110100101100000000001010000100001101000011010010110000000
00010000100000011000110110000101101101

Cómo manipular cadenas en BASH usando comandos externos

Para manipular cadenas en BASH utilizando un comando externo, necesitamos usar una característica que el manual de bash llame a la sustitución del comando. En resumen, lo que esté dentro de $ () o "se trata como un comando y se sustituye en su lugar. Francamente, prefiero la primera forma; Sin embargo, puede usar. La manera fácil de usar la sustitución del comando es asignar el resultado de la sustitución del comando a una variable de la siguiente manera.

Comandos

resultado = $ (comando)

En el caso de la manipulación de la cadena utilizando un comando externo en Bash, necesitaríamos abordar el eco de una cadena al comando, a menos que pase la cadena al comando como un parámetro se acepta. Así es como debería ser el nuevo resultado.

Comandos

resultado = $ (echo "$ resultado" | comando)

Ahora, intentemos hacer algo real. Sin embargo, reduzca una cadena que contenga palabras a la última palabra en la cadena? Para este ejemplo, usemos el comando externo mirando.

Notas sobre los siguientes comandos. Hagamos todo en minúsculas y deshacernos de los períodos. La cita es de Linus Torvalds. Es una cita realmente popular.

Comandos


cita = "hablar es barato. Muéstrame el código.";
last_word = $ (echo "$ cita //./ "| gawk 'imprimir $ (nf)');
echo "$ last_word ,,"

Producción

código

En pocas palabras, en la manipulación de la cadena en Bash

Aquí cubrimos cómo manipular las cadenas de la manera pura de Bash, así como el uso de comandos externos. Para las técnicas de manipulación de cadenas de bash puro, se utilizó una característica llamada expansión de parámetros. Por otro lado, para el caso de los comandos externos, se utilizó la sustitución de comandos. Admitentemente, al escribir esta pieza, mejoré mi capacidad para manipular cuerdas en Bash. Con suerte, tú también lo hiciste.

Tenga en cuenta que el tema de esta discusión no fue tratado en total. Sin embargo, se dejan ejercicios para aquellos que desean jugar un poco más. Para otras manipulaciones de cadenas no contenidas en este artículo, puede contactarme directamente o comunicarse con el editor.

Eso es suficiente manipulación de cuerdas, por ahora ... gracias,