Jak znaleźć ciąg zawierający ciąg, wypisz go + x wiersze po

0

Mam dziennik, który stale wyrzuca dane na ekran. Muszę złapać linię zawierającą określony ciąg, wydrukować go i następne 5 wierszy. Łatwo to zrobić z plikiem statycznym, takim jak: grep -A 5 „XXX” / mnt / flash / logs / system / messages

Daniel
źródło
Twój tytuł powinien informować o tym, że plik ciągle się zmienia. Pokazujesz w swoim pytaniu, że znasz odpowiedź na pytanie zadane w tytule (grep -A). Ale treść pytania pokazuje, że masz na myśli plik, który się zmienia.
barlop
A także twoje pytanie, co z umieszczeniem tej linii grep w pętli?
barlop
Ponadto, ponieważ wiesz, jak drukować linie po łańcuchu (np. Grep -A 5). Dlaczego po prostu nie zapytasz, jak znaleźć i wydrukować wiersz pliku, który się zmienia? (I zapomnij o pytaniu o linie po tym, jak już to wiesz).
barlop

Odpowiedzi:

1
tail -f /mnt/flash/logs/system/messages | grep -A 5 "XXX"

O tail -f:

-f
Jeśli plik wejściowy jest zwykłym plikiem lub operand pliku określa FIFO, nie kończ po skopiowaniu ostatniej linii pliku wejściowego, ale odczyt i kopiowanie kolejnych bajtów z pliku wejściowego, gdy staną się dostępne. […]

Już wiesz grep -A. Pamiętaj, że nie jest przenośny ( -A nie jest wymagany przez POSIX ) podczas tail -f jest.

Ponieważ często obraca się dzienniki, może się okazać find --follow=name podejście bardziej przydatne. Twój find może go wspierać lub nie, sprawdź man 1 find w twoim systemie operacyjnym.

Kamil Maciorowski
źródło