Necesito buscar las primeras 50 líneas de cada archivo en un directorio y sus subdirectorios.
Esto hará la parte recursiva, pero ¿cómo limito solo las primeras 50 líneas de cada archivo?
grep -r "matching string here" .
Algunos de estos archivos son enormes, y solo quiero que coincidan en las primeras 50 líneas. Estoy tratando de acelerar el proceso al no buscar megabytes de datos binarios en algunos archivos.
Respuestas:
Si solo quieres los archivos que coinciden:
o
Si solo desea las cadenas coincidentes:
o mejor,
Y si quieres ambos:
Observaciones
sed
lugar del combohead
-grep
.-exec ... +
cada método, ¡pero luego tendrás que codificar tu ciclo interno tú mismo! (ejercicio trivial dejado al lector). Esto podría ser un poco más eficiente si tiene millones de archivos.fuente
Si necesita la salida grep como en el original, puede hacer:
Si solo necesita los nombres de archivo, puede reemplazar el segundo grep con
echo "$f"
.fuente
Tendrá que combinar algunas utilidades diferentes para obtener la funcionalidad deseada. Use el
find
comando para repetir los directorios, encontrar todos los archivos y ejecutar elhead
comando en cada archivo encontrado. Elhead
comando se puede usar para volcar solo las primeras 50 líneas de cada archivo. Finalmente, canalice la salida a grep para buscar la cadena deseada.find . -type f -exec head -n 50 {} ";" | grep "matching string here"
fuente