Me gustaría enumerar los archivos de forma recursiva y única que contienen la palabra dada.

Ejemplo : Comprobando la palabra «comprobar», lo que normalmente hago es un grep

$ grep check * -R 

Pero como hay muchas apariciones de esta palabra, obtengo muchos resultados. Así que solo necesito enumerar los nombres de archivo que contienen la palabra de búsqueda dada. Supongo que algún truco con find y xargs sería suficiente aquí, pero no estoy seguro.

¿Alguna idea?

Respuesta

Utilice -l o --files-with-matches opción que se documenta de la siguiente manera:

Suprime la salida normal; en su lugar, imprima el nombre de cada archivo de entrada desde el que normalmente se habría impreso la salida. El escaneo se detendrá en el primer partido. (-l es especificado por POSIX.)

Entonces, para su ejemplo, puede usar lo siguiente:

$ grep check * -lR 

Comentarios

  • Funciona también en MSYS. ¡Genial!
  • Usé grep -rl "text to find" "/usr/share" y funcionó muy bien.

Respuesta

find . -type f -exec grep -l check {} + 

Probablemente no quieras usar la opción -R que con las versiones modernas de GNU grep sigue enlaces simbólicos cuando desciende de directorios. Utilice la opción -r en su lugar, que desde la versión 2.12 (abril de 2012) ya no sigue enlaces simbólicos.

Si su grep no es el de GNU, o es anterior a la versión 2.12, o si necesita que su código sea portátil a sistemas GNU que no sean de última generación, use el find comando anterior.

De lo contrario, puede hacer:

grep -rl check . 

No use * (ya que eso omitiría los archivos ocultos en el directorio actual (y solo en el directorio actual) y causaría problemas a los archivos cuyo nombre comience con -), evite pasar opciones después de argumentos ya que eso no es guaran Está diseñado para funcionar según el entorno y no es portátil.

Respuesta

Intente esto:

find . -type f | xargs grep -c check $1 | grep -v ":0" 

En cuanto a las grep banderas …

-c devuelve un nombre de archivo seguido de: y un número que indica cuántas veces aparece la cadena de búsqueda en el archivo dado.

-v tomará la salida del primer grep busque, filtre los archivos con resultados cero e imprima solo los archivos con resultados distintos de cero.

Comentarios

  • Esto obtendrá un falso negativo si tiene archivo (s) (o director (s)) cuyos nombres contienen :0. Es ' mejor hacerlo grep -v ':0$'. Incluso eso se ahogará con los nombres de ruta que contienen nuevas líneas.

Respuesta

grep -lR "text-to-find" <where-to-find> también funciona bien.

Por ejemplo, grep -lR "NAVIGATE" . donde encontramos la palabra NAVIGATE en el . en el directorio actual.

Respuesta

grep -rin «whatToFind» locationToFInd

eg $ grep -rin «vihaan».

buscará y enumerará recursivamente los nombres de archivos y las líneas correspondientes que tengan «vihaan» en ellos, «. se refiere al directorio actual.

Responder

find . -type f | grep "keyword" * 

buscar en el directorio actual. Para buscar desde la raíz, especifique / en lugar de .

Respuesta

 grep -rli trim \` find . -name *.q \` 

Proporcionarle la lista de .q archivos que contiene la palabra clave trim

Deja una respuesta

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