2012-01-25 18 views

Respuesta

7

Bueno, creo que no es compatible con grep para limitar N coincide con el final del archivo así que esto es lo que tiene que hacer

ls *.log | while read fn; do grep -iH create "$fn" | tail -1; done 

Reemplazar tail -1 -1 con N. (opciones -H es imprimir la nombre del archivo de lo contrario no se imprimirá si está grep en un solo archivo y eso es exactamente lo que estamos haciendo arriba)

NOTA: La solución anterior funcionará bien con nombres de archivos con espacios.

Para N partidos desde el inicio del archivo

grep -i -m1 create *.log 

Reemplazar -m1 1 con N.

+0

usando 'ls' como esa puede ser una muy mala idea. Aquí está [por qué] (http://mywiki.wooledge.org/ParsingLs)? –

+1

@Jaypal 'muy mala idea' y si los archivos de registro en el caso anterior son creados por fuentes conocidas entonces no tiene sentido sobre-diseñar la solución. Y si no lo son, entonces puedo entender la complejidad añadida. – havexz

+0

'archivo de patrón grep | cola -1' hará – Azi

1

Tipo de fuera de la manga aquí, pero lea esto How to do something to every file in a directory using bash? como punto de partida. Aquí está mi opinión, asumiendo solo las últimas 20 coincidencias de cada archivo.

for i in * 
do 
    if test -f "$i" 
    then 
    grep somestring $i | tail -n 20 
    fi 
done 

podría no ser del todo correcta, no tienen archivos en frente de mí comprobar con, pero debe ser un punto de partida.

1
for file in /path/to/logs/*.log 
do 
    tail <(grep -H 'pattern' "$file") 
done 

Esto mostrará una lista últimos 10 partidos como tail por listas predeterminadas últimas 10 líneas.Si desea obtener un número diferente, entonces la siguiente ayudaría -

for file in /path/to/logs/*.log 
do 
    tail -n number <(grep -H 'pattern' "$file") 
done 

donde number puede ser su número de líneas

0

Última ocurrencia de patrón de búsqueda en todos los archivos de registro en el directorio actual:

find . -name \*log\* | xargs -I{} sh -c "grep --color=always -iH pattern {} | tail -n1" 

Primera ocurrencia de búsqueda Patte rn en cada archivo de registro en el directorio actual:

find . -name \*log\* | xargs -I{} sh -c "grep --color=always -iH pattern {} | head -n1" 

reemplazar 1 en -n1 con número de ocurrencias desea


Alternativamente, puede utilizar find 's -exec opción en lugar de xargs

find . -name \*log\* -exec sh -c "grep --color=always -iH pattern {} | tail -n1" \; 

Puede utilizar -mtime con find para limitar su búsqueda de archivos de registro a, digamos 5 días

find . -mtime -5 -name \*log\* | xargs -I{} sh -c "grep --color=always -iH pattern {} | tail -n1"

Cuestiones relacionadas