2012-01-25 11 views

Odpowiedz

7

Dobrze myślę grep nie obsługuje ograniczyć N mecze z końca pliku, więc to, co masz do zrobienia

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

Wymień tail -1 -1 N. (-h opcji jest, aby wydrukować nazwa pliku nie będzie drukowana, jeśli jesteś grep w jednym pliku i to właśnie robimy powyżej)

UWAGA: Powyższe soln będzie działało dobrze z nazwami plików ze spacjami.

Dla N mecze od początku pliku

grep -i -m1 create *.log 

Wymień -m1 1 z N.

+0

Korzystanie 'ls' jak to może być bardzo zły pomysł. Tutaj jest [dlaczego] (http://mywiki.wooledge.org/ParsingLs)? –

+1

@Jaypal "bardzo zły pomysł" dobrze, jeśli pliki dziennika w powyższym przypadku są tworzone przez znane źródła, to nie ma sensu nadinżynieria soln. A jeśli nie, to rozumiem dodatkową złożoność. – havexz

+0

'plik wzorca grep | ogon -1' zrobi – Azi

1

Rodzaj off mankiet tutaj, ale przeczytaj ten How to do something to every file in a directory using bash? jako punkt wyjścia. Oto moje podejście, zakładając zaledwie 20 ostatnich dopasowań z każdego pliku.

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

Może nie być całkowicie poprawna, nie mają pliki mną skontaktować się z, ale powinno być punktem wyjścia.

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

Będzie to lista 10 ostatnich meczach jak tail domyślnie list ostatnich 10 linii.Jeśli chcesz dostać inny numer, a następnie dodaje pomogłoby -

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

gdzie number może być Twój numer linii

0

Ostatni występowania poszukiwaniu wzorca w każdym pliku dziennika pod bieżącym katalogu:

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

Pierwszy występowanie wyszukiwania patte rn w każdym pliku dziennika na podstawie aktualnego katalogu:

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

zastąpić 1 w -n1 z liczby wystąpień chcesz


Alternatywnie można użyć find „s -exec opcję zamiast xargs

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

Można użyć -mtime z find ograniczyć dół wyszukiwanie plików dziennika do, powiedzmy, 5 dni

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

Powiązane problemy