Comprobando archivos en busca de una cadena usando un bucle

Comprobando archivos en busca de una cadena usando un bucle

Estoy intentando recorrer archivos en un directorio que comienza con la cadena indicada en la fordeclaración. Dentro del bucle, quiero buscar la cadena del patrón foodentro del archivo. Si la cadena se encuentra en el archivo que echoquiero $filename.

#!/ppp/bash

for filename in $(find ~/filesList -type f -name "pge_*")
do
      #If 'foo' located echo $filename
      
done

Cualquier sugerencia sería muy apreciada.

Respuesta1

Utilice findpara ejecutar grep:

find ~/filesList -type f -name 'pge_*' -exec grep -lF -- foo {} +

-lenumera los nombres de los archivos que contienen una coincidencia para foo. -Fsignifica que la expresión foodebe tomarse como una cadena fija en lugar de una expresión regular.

Respuesta2

Primera sugerencia: no es necesario usarlo finden su forbucle, ralentiza las cosas. En su lugar, puedes hacer algo como:

for f in ~/filesList/pge_*

Una advertencia bastante importante es que esta versión simplificada no buscará subdirectorios ~/filesListmientras que la findversión sí lo hará, por lo que, dependiendo de su caso de uso real, es posible que no pueda simplificar.

En cuanto a la búsqueda dentro de esos archivos, querrás utilizar un greptipo de construcción:

if (grep needle haystack > /dev/null 2>&1)
then
  echo $f
fi

Cuando grepencuentra la aguja que está buscando, devuelve un valor distinto de cero, por lo que la condición se evalúa como VERDADERA. Utilizo el > /dev/null 2>&1para evitar ver los resultados del grep. Si grepno encuentra la aguja en el pajar, su código de retorno es 0, por lo tanto el condicional es FALSO, omitiendo la thendeclaración.

información relacionada