¿Cómo uso grep para buscar una cadena de texto en archivos en subcarpetas de una carpeta principal sin el modificador -r?

¿Cómo uso grep para buscar una cadena de texto en archivos en subcarpetas de una carpeta principal sin el modificador -r?

Estoy usando Solaris 10 y tengo dos grepversiones, una en /usr/biny otra en /usr/xpg4/bin. He estado buscando una respuesta sobre cómo buscar texto dentro de archivos dentro de subcarpetas de un directorio principal usando grep. Todas las respuestas hablan de -rinterruptores -Rque no tengo disponibles con mi versión de grep.

Respuesta1

La sintaxis estándar (POSIX) es:

find /path/to/parent -type f -exec grep 'XXX' /dev/null {} +

(Esto /dev/nulles para asegurarse de que grepsiempre se imprima un nombre de archivo). Esto funcionará en todos los sistemas POSIX, incluido Solaris. Los únicos sistemas conocidos posteriores a los 90 en los que se sabe que eso no funciona son los sistemas GNU antiguos (ahora muy antiguos).

GNU inicialmente introdujo un -print0predicado y una -0opción xargspara eso:

find /path/to/parent -type f -print0 | xargs -0 grep 'XXX' /dev/null

Ahora hay algunas otras implementaciones que lo admiten, pero no Solaris.

Arriba, en teoría, querrías agregar -runa opción para evitar la ejecución grepsi no hay un archivo, pero eso no es tanportátily en este caso particular, no hace una diferencia funcional

Respuesta2

Usando GNU grep(si está instalado):

ggrep -A3 -B23 'word' -R /log/

Esto verificará todos los archivos en la carpeta si la expresión regular wordcoincide y mostrará el resultado junto con la ruta del archivo.

GNU grepapoya la -Rbandera.

Respuesta3

Simplemente use ggrep que en Solaris existe en /usr/sfw/bin/ggrepuna ruta como esta:
/usr/sfw/bin/ggrep -H 'search-term' <file-name>*
busca su término de búsqueda en un grupo de nombres de archivos que comienzan con una palabra específica.

información relacionada