Cómo manipular cadenas en Bash en Linux
fatmawati achmad zaenuri/Shutterstock.com
Si hay algo con lo que Linux está bien equipado, son las utilidades de manipulación de cadenas. Pero también hay un conjunto completo de funciones integradas directamente en el shell de Bash. Así es como se usa.
Manipulación de cadenas
El ecosistema Linux está repleto de fantásticas herramientas para trabajar con texto y cadenas. Estos incluyen awk, grep, sed y cut. Para cualquier molestia de texto pesado, estas deberían ser sus opciones de acceso. A veces, sin embargo, es conveniente usar las capacidades integradas del shell, especialmente cuando está escribiendo un script breve y simple. Si su secuencia de comandos se va a compartir con otras personas y se ejecutará en sus computadoras, el uso de la funcionalidad estándar de Bash significa que no tiene que preguntarse acerca de la presencia o la versión de la secuencia de comandos de otras utilidades. Si necesita el poder de las utilidades dedicadas, utilícelas por todos los medios. Para eso están aquí. Pero a menudo su script y Bash pueden hacer el trabajo por su cuenta. Debido a que están integrados en Bash, puede usarlos en scripts o en la línea de comandos. Usarlos en una ventana de terminal es una forma rápida y conveniente de crear prototipos de sus comandos y perfeccionar la sintaxis. Evita el ciclo de edición, grabación, ejecución y depuración.
Creación y uso de variables de cadena
Todo lo que necesitamos para declarar una variable y asignarle una cadena es nombrar la variable, usar el signo igual =
y proporcione la cadena. Si hay espacios en su cadena, escríbalo entre comillas simples o dobles. Asegúrate de que no haya espacios a ambos lados del signo igual.
my_string="Hello, How-To Geek World."
echo $my_string
Una vez que crea una variable, ese nombre de variable se agrega a la lista de palabras de finalización de pestañas del shell. En este ejemplo, al escribir "my_" y presionar la tecla "Tab", ingresó el nombre completo en la línea de comando.
Variables de solo lectura
Hay un declare
comando que podemos usar para declarar variables. En casos simples, realmente no lo necesita, pero usarlo le permite usar algunas de las opciones del comando. Probablemente el que más usarás es el -r
(solo lectura). Esto crea una variable de solo lectura que no se puede modificar.
declare -r read_only_var="This is an immutable string!"
Si intentamos asignarle un nuevo valor, fallará.
read_only_var="A new string..."
Escribir en la ventana de terminal
Podemos escribir varias cadenas en la ventana del terminal usando echo o printf para que aparezcan como una sola cadena. Y no estamos limitados a nuestras propias variables de cadena, podemos incorporar variables de entorno en nuestros comandos.
user_account="Your user account is:"
echo $user_account $USER
Concatenar cadenas
El operador más-igual, +=
, le permite "añadir" dos cadenas juntas. Esto se llama concatenación.
user_account="Your user account is:"
user_account+=$USER
echo $user_account
Tenga en cuenta que no obtiene un espacio agregado automáticamente entre cadenas concatenadas. Si necesita un espacio, debe poner uno explícitamente al final de la primera cadena o al comienzo de la segunda.
user_account="Your user account is: "
user_account+=$USER
echo $user_account
Lectura de la entrada del usuario
Además de crear variables de cadena cuyo contenido se define como parte de su declaración, podemos leer la entrada del usuario en una variable de cadena. el read
el comando lee la entrada del usuario. el -p
(prompt) escribe un aviso en la ventana del terminal. La entrada del usuario se almacena en la variable de cadena. En este ejemplo, la variable se llama user_file
.
read -p "Open which file? " user_file
echo $user_file
Si no proporciona una variable de cadena para capturar la entrada, seguirá funcionando. La entrada del usuario se almacenará en una variable llamada REPLY
.
read -p "Open which file? "
echo $REPLY
Por lo general, es más conveniente proporcionar su propia variable y darle un nombre significativo.
Manipulación de cadenas
Ahora que tenemos nuestras cadenas, ya sea definidas en el momento de la creación, leídas de la entrada del usuario o creadas mediante la concatenación de cadenas, podemos comenzar a hacer cosas con ellas.
encontrar la longitud de la cadena
Si es importante o útil conocer la longitud de una cadena, se puede obtener precediendo el nombre de la variable con un hash " #
" símbolo.
my_string="There are 39 characters in this string."
echo ${#my_string}
Podemos extraer una subcadena de una variable de cadena proporcionando un punto de inicio en la cadena y una longitud opcional. Si no proporcionamos una longitud, la subcadena contendrá todo, desde el punto de inicio hasta el último carácter. El punto de inicio y la longitud siguen al nombre de la variable, con dos puntos " :
" entre ellos. Tenga en cuenta que los caracteres de una variable de cadena se numeran a partir de cero.
long_string="Frankenstein or the Modern Prometheus"
substring=${long_string:0:12}
echo $substring
echo ${long_string:27}
Otra variante le permite eliminar una serie de letras del final de la cadena. De hecho, le permite establecer un punto de partida y usar un número negativo como longitud. La subcadena contendrá los caracteres desde el punto de inicio hasta el final de la cadena, menos la cantidad de caracteres que especificó en el número negativo.
my_string="alphabetical"
echo ${my_string:5:-4}
De cualquier manera, la variable de cadena original está intacta. La subcadena "extraída" en realidad no se elimina del contenido de la variable. La desventaja de usar compensaciones de caracteres es que debe saber de antemano dónde están las subcadenas que desea extraer en la cadena. Si su cadena está delimitada por un carácter repetido, puede extraer subcadenas sin saber dónde están en la cadena o su longitud. Para buscar desde el principio de la cadena, siga el nombre de la variable con dos signos de porcentaje, %%
el carácter delimitador y un asterisco, *
. Las palabras de esta cadena están delimitadas por espacios.
long_string="first second third fourth fifth"
echo ${long_string%%' '*}
Esto devuelve la primera subcadena desde el principio de la cadena que no contiene el carácter delimitador. Esto se llama la opción de subcadena corta. La opción de subcadena larga devuelve la parte inicial de la cadena hasta la última subcadena delimitada. En otras palabras, omite la última subcadena delimitada. Sintácticamente, la única diferencia es que usa un solo signo de porcentaje " %
en el comando
long_string="first second third fourth fifth"
echo ${long_string%' '*}
Como era de esperar, puede buscar de la misma manera desde el final de la cadena. En lugar de un signo de porcentaje, use una libra " #
» y mueva el delimitador después del asterisco « *
en el comando
long_string="this.long.string.of.words.is.delimited.by.periods"
echo ${long_string##*.}
Esta es la opción de subcadena corta, elimina la primera subcadena que encuentra de la parte posterior de la cadena que no contiene el delimitador.
long_string="this.long.string.of.words.is.delimited.by.periods"
echo ${long_string#*.}
La opción de subcadena larga devuelve la parte posterior de la cadena hasta el primer delimitador desde el principio de la cadena. En otras palabras, omite la primera subcadena delimitada.
Sustitución de subcadena
Cambiar subcadenas por otras subcadenas es fácil. El formato es el nombre de la cadena, la subcadena que se reemplazará y la subcadena que se insertará, separados por una barra inclinada " /
" personajes.
string="blue pig giggles"
echo ${string/pig/goat}
Para limitar la búsqueda al final de la cadena, preceda la cadena de búsqueda con un signo de porcentaje " %
" personaje.
string="blue pig giggles"
echo ${string/%giggles/chuckles}
Para limitar la búsqueda al comienzo de la cadena, preceda la cadena de búsqueda con una almohadilla " #
" personaje.
string="blue pig giggles"
echo ${string/#blue/yellow}
Una cuerda es una cosa flexible.
Si una cadena no es exactamente como le gustaría o no la necesita, estas herramientas lo ayudarán a reformatearla para que se adapte a sus necesidades. Para transformaciones complicadas, use las utilidades dedicadas, pero para modificaciones menores, use las funciones integradas del shell y evite la sobrecarga de cargar y ejecutar una herramienta externa.
Deja una respuesta