Cómo comprobar si un archivo contiene una cadena específica usando Bash
Quiero comprobar si un archivo contiene una cadena específica o no en bash. Utilicé este script, pero no funciona:
if [[ 'grep 'SomeString' $File' ]];then
# Some Actions
fi
¿Qué hay de malo en mi código?
if grep -q SomeString "$File"; then
Some Actions # SomeString was found
fi
No necesitas [[ ]]
aquí. Simplemente ejecute el comando directamente. Agregue -q
la opción cuando no necesite la cadena que se muestra cuando se encontró.
El grep
comando devuelve 0 o 1 en el código de salida según el resultado de la búsqueda. 0 si se encontró algo; 1 en caso contrario.
$ echo hello | grep hi ; echo $?
1
$ echo hello | grep he ; echo $?
hello
0
$ echo hello | grep -q he ; echo $?
0
Puede especificar comandos como condición de if
. Si el comando devuelve 0 en su código de salida, significa que la condición es verdadera; de lo contrario falso.
$ if /bin/true; then echo that is true; fi
that is true
$ if /bin/false; then echo that is true; fi
$
Como puedes ver aquí ejecutas los programas directamente. Sin adicional []
o [[]]
.
En caso de que desee comprobar si el archivo no contiene una cadena específica, puede hacerlo de la siguiente manera.
if ! grep -q SomeString "$File"; then
Some Actions # SomeString was not found
fi