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 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

Crear y escribir una variable de cadena

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..."

No se puede cambiar una variable de cadena de solo lectura

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

Escribir dos cadenas en la ventana del terminal como si fueran una sola cadena

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

Concatenar cadenas con +=

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

Agregar un espacio adicional antes de usar += para concatenar dos cadenas

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

Lectura de entrada de cadena de usuario

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

Leer la entrada del usuario sin proporcionar una variable de cadena

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

Obtener la longitud de una cadena

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

Extraer subcadenas desde el principio y el final de una cadena

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

Extraer una subcadena del medio de una cadena

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%%' '*

Extraer una subcadena desde el frente de una cadena por delimitador

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 comando.

long_string="first second third fourth fifth"
echo $long_string%' '*

Extraer una subcadena larga desde el frente de una cadena por delimitador

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 comando.

long_string="this.long.string.of.words.is.delimited.by.periods"
echo $long_string##*.

Extraer una subcadena del final de una cadena por delimitador

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#*.

Extraer una subcadena larga desde el final de una cadena por delimitador

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 inclinada «/» caracteres.

string="blue pig giggles"
echo $string/pig/goat

Sustituir una subcadena en una cadena

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

Sustituir una subcadena al final de una cadena

Para limitar la búsqueda al comienzo de la cadena, preceda la cadena de búsqueda con un hash «#» personaje.

string="blue pig giggles"
echo $string/#blue/yellow

Sustituir una subcadena al comienzo de una cadena

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





Source link-39