używam grep wyodrębnić linie w poprzek zestawu plików:grep Ostatnio n zestawienia w plikach
grep someString * .log
Czy to możliwe, aby ograniczyć maksymalną liczbę meczów na plik do ostatnie n dopasowuje z każdego pliku?
używam grep wyodrębnić linie w poprzek zestawu plików:grep Ostatnio n zestawienia w plikach
grep someString * .log
Czy to możliwe, aby ograniczyć maksymalną liczbę meczów na plik do ostatnie n dopasowuje z każdego pliku?
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.
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.
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
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"
Korzystanie 'ls' jak to może być bardzo zły pomysł. Tutaj jest [dlaczego] (http://mywiki.wooledge.org/ParsingLs)? –
@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
'plik wzorca grep | ogon -1' zrobi – Azi