La manipulación de cadenas es uno de los conceptos fundamentales en el scripting bash. En programación, las cadenas son uno de los tipos de datos que son una secuencia ordenada de caracteres. Es importante que sepa cómo crear y manipular cadenas en bash. En esta guía, aprenderemos la manipulación de cadenas en scripts de shell Bash con ejemplos simples. Se sentirá cómodo trabajando con bash strings al final de este artículo.
Asignación de variables
Las cadenas se pueden asignar a una variable y luego usarse en la secuencia de comandos para su posterior procesamiento. Por ejemplo, estoy creando una variable llamada "GREET_USER"
e imprimiendo la cadena en la terminal.
$ GREET_USER="Hello, Thanks for visiting OSTechnix"
$ echo "$GREET_USER"
Bash no tiene un sistema de tipos sólido, por lo que si asigna un valor a una variable, se tratará como un tipo de cadena. Puede crear cadenas con comillas simples, dobles o sin comillas.
Hay una diferencia entre comillas simples y comillas dobles en bash. Las comillas simples evitan la expansión de variables y comandos, mientras que las comillas dobles la admiten. Eche un vistazo al siguiente ejemplo.
He creado otra variable llamada "SITE_NAME"
y se usa en el "GREET_USER"
variable. Entre comillas dobles, la variable se expandirá y entre comillas simples, la variable no se expandirá.
$ SITE_NAME="OSTechnix"
## DOUBLE QUOTES $ GREET_USER="Hello, Thanks for visiting ${SITE_NAME}" $ echo "$GREET_USER"
# SINGLE QUOTES
$ GREET_USER='Hello, Thanks for visiting ${SITE_NAME}'
$ echo "$GREET_USER"
Longitud de la cadena
Para encontrar la longitud de la cadena, puede usar #
símbolo. Encontrar la longitud de la cadena será útil en algunos casos en los que tenga que escribir algo de lógica en función del número de cadenas.
$ echo "${#SITE_NAME}"
Conversión de cadenas a Array
Hay muchas formas de convertir el tipo de datos de cadena en tipo de matriz. La forma más sencilla sería encerrar la cadena entre corchetes.
$ ARR_TYPE=($GREET_USER) $ echo ${ARR_TYPE[@]} $ for element in ${ARR_TYPE[@]}; do echo $element done
El segundo método sería dividir la cadena y almacenarla como una matriz según el delimitador utilizado en la cadena. En el ejemplo anterior, el espacio se usa como separador de campo (IFS), que es el IFS predeterminado en bash. Por ejemplo, si tiene una cadena separada por comas, puede establecer el IFS en una coma y crear una matriz. Para obtener más detalles sobre IFS, consulte la siguiente guía:
- Secuencias de comandos de Bash:ciclo while y till explicado con ejemplos
$ STR_TO_ARR="column1,column2,column3" $ IFS="," $ ARR=(${STR_TO_ARR}) $ for element in ${ARR[@]}; do echo $element; done $ echo "${ARR[@]}"
Conversión de casos
Bash tiene soporte integrado para la conversión de mayúsculas y minúsculas. Debe usar algunos caracteres especiales al final de la cadena para la conversión de mayúsculas y minúsculas, como se muestra a continuación.
# SPECIAL CHARACTERS ,, ==> Converts an entire string to lowercase ^^ ==> Converts an entire string to Uppercase ~~ ==> Transpose Case , ==> Converts first letter alone to lowercase ^ ==> Converts first letter alone to uppercase
# ---- LOWER TO UPPER CASE ---- $ L_TO_U="welcome to ostechnix" $ echo ${L_TO_U^^} # ---- UPPER TO LOWER CASE ---- $ U_TO_L="WELCOME TO OSTECHNIX" $ echo ${L_TO_U,,} # ---- TRANSPOSE CASE ---- $ TRS_CASE="Welcome To OsTechnix" $ echo ${TRS_CASE~~} # ---- FIRST LETTER TO LOWERCASE ---- $ F_TO_L="OSTECHNIX" $ echo ${F_TO_L,} # ---- FIRST LETTER TO UPPERCASE ---- $ F_TO_U="ostechnix" $ echo ${F_TO_U^}
También puede usar la coincidencia de patrones de expresiones regulares y convertir el caso para las coincidencias.
$ L_TO_U="welcome to ostechnix"
$ echo ${L_TO_U^^[toe]}
Concatenación de cadenas
Puede concatenar varias cadenas colocando las cadenas una tras otra. Dependiendo de cómo se concatenen sus cadenas, también puede agregar caracteres adicionales.
$ SITE_NAME="OSTechnix"
$ MESSAGE="Welcome to"
$ echo "${MESSAGE} {SITE_NAME}"
Corte de hilo
El corte de cadenas es una forma de extraer una parte de una cadena utilizando la posición de índice. A cada carácter de la cadena se le asigna un valor entero con el que se puede utilizar para capturar una parte de la cadena. El valor del índice varía de 0 a N. A continuación se muestra la sintaxis para el corte.
{STRING:START:LENGTH} START => Starting Index Position LENGTH => Length of the String from position START
Si LENGTH
no se especifica, la cadena se imprimirá hasta el final desde la posición del índice START
.
$ SITE_NAME="OSTechnix"
$ echo ${SITE_NAME:2}
Con LONGITUD dada, imprimirá la subcadena desde la posición del índice INICIO y cuántos caracteres se imprimirán.
$ echo ${SITE_NAME:2:2}
También puede invertir la cuerda de muchas maneras. La forma más sencilla es usar el comando rev. Si desea hacer esto de manera bash sin usar ningún comando externo, debe escribir la lógica manualmente.
$ echo ${SITE_NAME} | rev
Buscar y reemplazar
Existe una forma nativa de buscar y reemplazar caracteres en una cadena sin usar ningún comando externo como sed
o awk
.
Para reemplazar la primera aparición de subcadena, use la siguiente sintaxis.
{STRING/X/Y}
The first occurrence of X will be replaced by Y.
Eche un vistazo al siguiente ejemplo donde la primera aparición de la palabra "linux"
se reemplaza con LINUX en mayúsculas.
$ MESSAGE="linux is awesome to work with.
Ubuntu is one of the powerful linux distribution"
$ echo $MESSAGE $ echo ${MESSAGE/linux/LINUX}
Para reemplazar todas las apariciones de la palabra, use la siguiente sintaxis.
$ echo ${MESSAGE//linux/LINUX}
Eliminar subcadena
Hay diferentes formas de eliminar una subcadena de la cadena. Utilidades externas como sed
, awk
o tr
se puede usar o hay una manera de hacerlo de forma nativa bash.
En la forma nativa de bash, la expansión de parámetros se usa para eliminar la subcadena. Tienes que usar el %
símbolo seguido de un patrón para eliminar. Esto coincidirá con el último patrón encontrado y lo eliminará.
Por ejemplo, deseo eliminar las palabras que vienen después del punto (.
) se debe utilizar la siguiente sintaxis. Aquí lo que viene después del punto (.
) será eliminado. En este caso, el último patrón coincidente .com se elimina.
$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME%.*}
Para hacer coincidir la primera aparición del patrón, use doble porcentaje símbolo
$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME%%.*}
También puede usar el #
o ##
símbolo que hará una especie de borrado inverso. Con un solo #
símbolo, se hace coincidir el primer patrón y se elimina todo lo anterior al patrón.
$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME#*.}
Con el doble ##
símbolo, se hace coincidir el último patrón y se elimina todo lo anterior al patrón.
$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME##*.}
Conclusión
En este artículo, hemos visto cómo crear cadenas en bash y diferentes formas de manipular las cadenas. Para familiarizarse con la manipulación de cadenas bash, inicie la terminal y comience a practicar los ejemplos proporcionados en esta guía. Si tiene algún comentario o pregunta, utilice la sección de comentarios a continuación.
Guías de secuencias de comandos de Bash:
- Secuencias de comandos de Bash:comando Printf explicado con ejemplos
- Bash Scripting:matriz indexada explicada con ejemplos
- Secuencias de comandos de Bash:matriz asociativa explicada con ejemplos
- Secuencias de comandos de Bash:bucle For explicado con ejemplos
- Redireccionamiento de Bash explicado con ejemplos
- Secuencias de comandos de Bash:variables explicadas con ejemplos
- Bash Scripting:funciones explicadas con ejemplos
- Comando Bash Echo explicado con ejemplos en Linux
- Tutorial de Bash Heredoc para principiantes