¿Cómo especificarle a grep que quiero seleccionar un prefijo de ruta cuando hago una búsqueda recursiva?

¿Cómo especificarle a grep que quiero seleccionar un prefijo de ruta cuando hago una búsqueda recursiva?

Ejemplo. Tengo una palabra que estoy buscando, di"gato". Y sé que la palabra se puede ubicar en cualquier lugar del directorio de trabajo actual. Así que usogrep-r, y esto da los resultados de la siguiente forma:

./example_root/[dir1|dir2]/[SOME_ARBITRARY_SUBPATH]/cat_file,

dónde

archivo_gato

es el archivo que contiene la palabra"gato". ¿Qué pasa si sólo estoy interesado en

/raíz_ejemplo/dir1/[cualquiera_ruta]

prefijo para mi camino? ¿Cómo se lo digo?grep?

Respuesta1

lo intentaré

grep -rl cat directory | xargs dirname

dónde

  • grep -rl cat directory busque recursivamente ( -r) cat en el directorio y ( -l) archivos lisy.
  • | xargs dirnamecada archivo se "entrega" a dirname, lo que elimina parte del archivo.

Respuesta2

La respuesta de @Kusalananda en los comentarios es lo que quería: simplemente hazlo.

grep -r 'cat' /example_root/dir1/

Sin embargo, en caso de que desee recuperar los nombres de los directorios donde residen las palabras, lo siguiente (créditos a @Archemar) es útil.

grep -rl cat directory | xargs dirname

información relacionada