Cómo comprobar si un archivo contiene una cadena específica usando Bash

Resuelto Hakim asked hace 12 años • 11 respuestas

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?

Hakim avatar Jul 02 '12 11:07 Hakim
Aceptado
if grep -q SomeString "$File"; then
  Some Actions # SomeString was found
fi

No necesitas [[ ]]aquí. Simplemente ejecute el comando directamente. Agregue -qla opción cuando no necesite la cadena que se muestra cuando se encontró.

El grepcomando 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 [[]].

Igor Chubin avatar Jul 02 '2012 04:07 Igor Chubin

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
Lahiru Chandima avatar Jul 23 '2019 06:07 Lahiru Chandima