Subcadenas en Bash

    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 鈥嬧媏n 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铆.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *