Cómo manipular cadenas en Bash en Linux
Si hay algo con lo que Linux está bien equipado, son las utilidades para manipular 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 disputa 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 corto 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 sobre la presencia o la versión de ninguna de las otras utilidades.
Si necesita el poder de las utilidades dedicadas, utilícelas por todos los medios. Para eso están. Pero a menudo, su script y Bash pueden hacer el trabajo por sí solos.
Debido a que son elementos integrados de Bash, puede usarlos en secuencias de comandos 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, guardado, ejecución y depuración.
Crear y trabajar con 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, envuélvalos entre comillas simples o dobles. Asegúrese de que no haya espacios en blanco a ambos lados del signo igual.
my_string="Hello, How-To Geek World."
echo $my_string
Una vez que haya creado una variable, ese nombre de variable se agrega a la lista de palabras de finalización de tabulación del shell. En este ejemplo, al escribir "my_" y presionar la tecla "Tab" se ingresa 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ías es el -r
(solo lectura) opción. Esto crea una variable de solo lectura que no se puede cambiar.
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 parezcan una sola cadena. Y no estamos limitados a nuestras propias variables de cadenas, podemos incorporar variables de entorno en nuestros comandos.
user_account="Your user account is:"
echo $user_account $USER
Cadenas de concatenación
El operador más-igual, +=
, le permite "agregar" dos cadenas juntas. Se llama concatenar.
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 tener 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
RELACIONADO: Cómo establecer variables de entorno en Bash en Linux
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.
los read
El comando lee la entrada del usuario. los -p
La opción (mensaje) escribe un mensaje 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 saber la longitud de una cadena, podemos obtenerla 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 dentro de 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 en 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 variación le permite descartar una cantidad de letras del final de la cadena. Efectivamente, le permite establecer un punto de inicio 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}
En todos los casos, la variable de cadena original no se modifica. La subcadena "extraída" en realidad no se elimina del contenido de la variable.
La desventaja de usar compensaciones de caracteres es que necesita saber de antemano dónde se encuentran dentro de la cadena las subcadenas que desea extraer.
Si su cadena está delimitada por un carácter repetido, puede extraer subcadenas sin saber dónde están en la cadena ni cuánto tiempo tienen.
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 frontal 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 mando.
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 un hash "#
”Firme, y mueva el delimitador para venir después el asterisco"*
"En el mando.
long_string="this.long.string.of.words.is.delimited.by.periods"
echo ${long_string##*.}
Esta es la opción de subcadena corta, recorta la primera subcadena que encuentra desde 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 frente 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 diagonal "/
"Caracteres.
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, precede la cadena de búsqueda con un hash "#
"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 los ajustes menores use las funciones integradas de shell y evite la sobrecarga de cargar y ejecutar una herramienta externa.
RELACIONADO: Todo lo que siempre quiso saber sobre los inodos en Linux
Descubre más contenido