Subcadenas en Bash

S

A lo largo de su carrera de programación, encontrará que hay bastantes veces en las que necesita extraer una subcadena de otra cadena. Las cadenas son una de las estructuras de datos más comunes, por lo que esto aparece con frecuencia. Apuesto a que podrías decirme cómo hacerlo en tu lenguaje de programación favorito, pero ¿y si tuvieras que hacerlo en Intento? No es tan obvio en Bash como en otros idiomas, por lo que explicaremos cómo hacerlo de diferentes formas en este artículo.

Si tiene experiencia con sistemas operativos basados ​​en Unix, probablemente ya conozca el shell Bash. Pero si no lo hace, aquí hay una explicación rápida. Esencialmente, es un shell de comandos que se escribió inicialmente para el proyecto GNU como reemplazo del shell Bourne. Muchos desarrolladores usan el shell Bash como interfaz para escribir código o interactuar con el sistema de archivos de su sistema operativo, así como para ejecutar otros comandos. Por lo tanto, siempre es útil saber cómo realizar una determinada tarea en caso de que lo use con frecuencia o necesite escribir un script de shell.

Usando el comando de corte

Obtener una subcadena de la cadena original usando el terminal no es demasiado difícil gracias a un comando incorporado diseñado específicamente para este propósito. Funciona bien para usarlo directamente en la línea de comandos o para usarlo dentro de un script de shell (un archivo .sh). El comando al que me refiero es cut, que es un comando de Bash que toma una cadena y algunas banderas (-cN-M) como entradas y luego genera la subcadena resultante. Aquí hay un ejemplo del formato del comando:

$ echo "STRING" | cut -cN-M

Cuando conecte las variables (tanto la cadena como las banderas), Bash le devolverá los caracteres de la cadena a partir del índice N y termina en M (con los caracteres en los índices N y M ambos incluidos).

Probemos algunos ejemplos. En el siguiente, usamos la cadena “abcdefghi” y extraemos una subcadena a continuación:

$ echo "abcdefghi" | cut -c2-6
bcdef

Cuando ejecuta el comando anterior en una terminal, obtendrá “bcdef” como resultado.

Especificar el índice de caracteres no es la única forma de extraer una subcadena. También puede utilizar el -d y -f banderas para extraer una cadena especificando caracteres para dividir. los -d bandera le permite especificar el delimitador para dividir mientras -f le permite elegir qué subcadena de la división elegir. Tenga en cuenta que el cut El comando no está indexado en 0, por lo que el primer elemento de la lista comienza en 1.

$ echo "STRING" | cut -d'C' -f I

En el ejemplo anterior, C es el personaje para dividir y I es el índice a elegir.

Dado esto, probemos con otro ejemplo. Suponga que tiene que extraer una serie de dígitos del nombre de un directorio. El formato del nombre del directorio podría ser algo así como “cumpleaños-091216-imágenes”. En este ejemplo, hay algunos caracteres antes de los dígitos que nos interesan y un par de caracteres después de ellos. También hay guiones en el medio como se indica. Podemos abordar fácilmente este problema con el cut comando usando la sintaxis anterior que acabamos de presentar. Así es cómo:

$ echo "birthday-091216-pics" | cut -d'-' -f 2
091216

Esto divide la cadena en una matriz ([“birthday”, “091216”, “pics”]), y luego muestra un elemento de esa matriz para devolverlo (el segundo elemento).

Si, en cambio, necesita usar esto en un script de shell, su código puede verse así:

STR="birthday-091216-pics"
SUBSTR=$(echo $STR | cut -d'-' -f 2)
echo $SUBSTR

Cuando ejecuta los comandos anteriores, obtiene “091216” como salida, como antes.

Uso de la sintaxis de subcadena de Bash

Otra forma de extraer subcadenas en un script de shell es usar una variable Bash con la sintaxis de subcadena. La sintaxis se ve así:

string=YOUR-STRING
echo ${string:P}
echo ${string:P:L}

Aquí P es un número que indica el índice inicial de la subcadena y L es la longitud de la subcadena. Si omite el L parámetro, luego se devuelve el resto de la cadena, comenzando desde la posición P.

Esto es diferente de antes con el cut comando donde dimos los índices inicial y final. En este caso, tenemos que dar el índice inicial y la longitud en su lugar (o ninguna longitud).

Esta forma suele ser más preferida para los scripts de shell, ya que es sintácticamente más compacta y más fácil de leer. Sin embargo, no funciona bien cuando se usa directamente desde la línea de comando, en cuyo caso probablemente prefiera cut.

Conclusión

Hay varias formas de obtener una subcadena en Bash, algunas de las cuales discutimos aquí. Puede utilizar el cut función o la sintaxis de la subcadena Bash para extraer cadenas de acuerdo con sus necesidades. Para aprender más sobre cut función específicamente (que también se puede utilizar en archivos), consulte su Página de Wikipedia aquí.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad