
Estoy usando Solaris 10 y tengo dos grep
versiones, una en /usr/bin
y 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 -r
interruptores -R
que 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/null
es para asegurarse de que grep
siempre 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 -print0
predicado y una -0
opción xargs
para 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 -r
una opción para evitar la ejecución grep
si 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 word
coincide y mostrará el resultado junto con la ruta del archivo.
GNU grep
apoya la -R
bandera.
Respuesta3
Simplemente use ggrep que en Solaris existe en /usr/sfw/bin/ggrep
una 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.