Entonces, tiene una cadena larga y desea verificar que esta cadena contenga una subcadena en su secuencia de comandos bash.
Hay más de una forma de buscar subcadenas en bash shell. Primero mostraré algunos ejemplos simples, seguidos de un script bash genial que usa este concepto en un escenario del mundo real.
Comprobando la subcadena en bash usando la declaración if else
Si está familiarizado con las declaraciones condicionales en bash, puede usarlas para verificar si una cadena contiene la subcadena de la siguiente manera:
if [[ $fullstring == *"$substr"* ]];
Ejemplo simple para verificar la subcadena
Los corchetes dobles son necesarios aquí. Considero que esta es la forma nativa porque no utiliza ninguna otra herramienta. Permítanme explicar el fragmento anterior con un ejemplo adecuado.
Inicialice una variable con una cadena larga:
[email protected]:~$ fullstring="This is a string with a stretch"
Ahora, guarde la palabra "estirar" dentro de una variable llamada substr1
:
[email protected]:~$ substr="stretch"
Hagamos la comparación de subcadenas:
[email protected]:~$ if [[ $fullstring == *"$substr"* ]]; then
Aquí, * significa cero o más caracteres. Espero que esté familiarizado con el concepto de comillas en bash scripting. El $substr dentro de las comillas lo reemplaza con su valor.
Básicamente, está comprobando si la cadena completa coincide con el tipo de patrón xxxxsubstrxxxx.
También podría usar la subcadena directamente en lugar de usarla a través de una variable como esta:
[email protected]:~$ if [[ $fullstring == *"stretch"* ]]; then
Entiendes la esencia. Permítanme completar este script con otra declaración que muestre un mensaje alternativo si no se encuentra la subcadena:
#!/bin/bash
fullstring="This is a string with a stretch"
substr="stretch"
if [[ $fullstring == *"$substr"* ]]; then
echo "Found $substr!"
else
echo "$substr not found!"
fi
Puede ver fácilmente que si ejecuta el script de shell anterior, encontrará la subcadena.
[email protected]:~$ bash substr.sh
Found stretch!
Un mejor ejemplo del mundo real para encontrar subcadenas en bash
Las subcadenas pueden ser muy útiles en los scripts para “interactuar” con los usuarios. Use el comando de lectura para permitir que su script bash acepte la entrada del usuario.
echo "Hey there..what is your name?"
read Name
echo "Hello "$name"! The Matrix Resurrections trailer is here! Is your pill Red or Blue?"
read Pill
if [[ $Pill == *"Red"* || $Pill == *"red"* ]]; then
echo "Welcome..to the real world "$Name"!"
else
echo "Wake Up "$Name"!"
fi
Dale permiso de ejecución y ejecuta el script:
[email protected]:~$ chmod +x makeyourchoice.sh
[email protected]:~$ ./makeyourchoice.sh
Salida para el script anterior:
Hey there..what is your name?
avimanyu
Hello avimanyu! The Matrix Resurrections trailer is here! Is your pill Red or Blue?
I have Red pill
Welcome..to the real world avimanyu!
Aquí, mejoré un poco la condición if al ocuparme de dos posibilidades probables de distinción entre mayúsculas y minúsculas. Solo Red
es la subcadena aquí. Pero red
es una entrada posible también. Entonces, agregué otra condición. ||
indica “o”. Si ingresa Red
, es una subcadena. Pero aunque red
no es uno, tuve que agregarlo.
Encontrar subcadena en bash usando el comando grep
Aquí hay otra forma de encontrar una subcadena en una cadena en bash. Use el comando grep de esta manera:
if grep -q "$substr" <<< "$fullstring"; then echo "Found"; fi
El q
options significa que grep estará en modo silencioso, sin mostrar ningún resultado. Tenga en cuenta que hay 3 <, no solo 2.
Espero que este tutorial rápido lo haya ayudado a buscar una subcadena específica dentro de una cadena. Si tiene preguntas o sugerencias, no dude en dejar un comentario a continuación. Por cierto... ¿Qué pastilla elegiste? ¿Hiciste tu elección?