Mam zestaw plików dziennika, które muszę przejrzeć i chciałbym wyszukać określone ciągi w tych samych plikach na raz. Czy to możliwe? Obecnie używam
grep -E 'fatal|error|critical|failure|warning|' /path_to_file
Jak z tego korzystać i wyszukiwać ciągi wielu plików jednocześnie? Jeśli jest to coś, co wymaga skryptu, czy ktoś może podać prosty skrypt, aby to zrobić?
grep
może przyjąć więcej niż jeden argument pliku.Odpowiedzi:
źródło
grep
pominąć katalogi, ale nadal rekurencyjnie sprawdzać wszystkie pliki?grep -E 'text' **/*
działa, ale wyświetla komunikat o błędzie dla każdego podkatalogu (a następnie poprawnie sprawdza wszystkie zawarte w nim pliki)find . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
Możesz użyć czegoś takiego:
Znajdzie każdy plik z
.log
rozszerzeniem i zastosujegrep
polecenie.źródło
xargs
możliwością poważnego pęknięcia białych znaków w nazwach plików, kiedy można po prostu użyćfind . -name '*.log' -exec grep -E 'fatal|error|critical|failure|warning' {} +
?Jeśli jest to prostsze, możesz po prostu określić każdy plik jeden po drugim.
źródło
Jeśli potrzebujesz grepować na dowolny zestaw nazw plików, których nie można odzyskać za pomocą wyrażenia regularnego:
Jaka jest przewaga nad wklejaniem nazw plików jeden po drugim? Możesz skompilować listę nazw plików w pliku tekstowym, a następnie wkleić.
źródło
Jeśli chcesz przeszukiwać rekurencyjnie także w plikach podkatalogów, możesz użyć poniższego polecenia
Będzie również wyszukiwał rekurencyjnie w plikach podkatalogów
źródło
To było bardzo czasochłonne zadanie. I tak, z pewnością musiał być skryptowany, jeśli zamierzasz wyszukiwać wiele ciągów w wielu różnych dziennikach jednocześnie. Ale ostatnio musiałem to zrobić i było to dość bolesne. Niemniej jednak jest to gotowe i gotowe i można je pobrać z następującego linku:
Skrypt wyszukiwania dziennika Pobierz
Sposób działania jest dość prosty.
Scenariusz 1: Monitoruj JEDEN ciąg w JEDNYM pliku dziennika
Scenariusz 2: Monitoruj WIELE ciągów w JEDNYM pliku dziennika
Scenariusz 3: Monitoruj pojedyncze / wiele ciągów w wielu plikach dziennika
Uwagi:
_P_ oznacza LUB - zastępuje potok „|” symbol, ponieważ jest mniej prawdopodobne, że będziesz musiał wyszukać ciąg zawierający „_P_”. Jeśli nie chcesz wpisywać „_P_”, możesz po prostu zastąpić _P_ przez „|”.
Podczas korzystania z tego skryptu parametry, które często zmieniasz, to:
Korzystając z opcji -ndfoundmul, otrzymasz wynik podobny do:
Rozwiązanie problemu z oryginalnym plakatem: Skanuj w poszukiwaniu wielu ciągów znaków w wielu plikach dziennika
Systemy operacyjne: przetestowano na Ubuntu i Red Hat
źródło
Spowoduje to wyszukanie „krytycznych lub błędów lub krytycznych, awarii lub ostrzeżeń lub ciągu wyszukiwania” w plikach o nazwie zaczynającej się od „log_file?” i rozszerzenie „lo ” * w ścieżce / path / to / the / file / i nadaj ciągowi wyszukiwania losowy kolor i numer linii wydruku, na której został znaleziony.
źródło
grep
umiejętności, więc powodzenia w karierze USE!-E
i-F
nie można ich używać jednocześnie, są w konflikcie (literówka?).Odpowiedź JigarGandhi pokazuje użycie wieloznacznej gwiazdki. Jest ich więcej i możesz je zobaczyć tutaj lub biegając
man 7 glob
.Jednym z nich, który uznałem za użyteczny, jest dopasowanie zakresu
[]
. Ponieważ system, nad którym pracuję, tworzy np. Pliki dziennika o numerach sekwencyjnychproduct.log.1
product.log.2
...
product.log.200
, wygodnie jest grep za pomocą jednego polecenia na 3 lub 4 plikach sekwencyjnych, ale nie więcej. Więc togrep 'whatever' product.log.[5-7]
będzie grep dla wszystkich plików z rozszerzeniem product.log. 5, 6 lub 7. Symbol wieloznaczny nie musi znajdować się na końcu, więc odpowiedź flickerfly można uprościć
grep -E 'fatal|error|critical|failure|warning' file[1,2].log
Zauważ też, że te symbole wieloznaczne mogą być używane w innych poleceniach, jak
cp
na przykład w.źródło
Możesz także użyć nawiasów klamrowych, jeśli wszystkie pliki znajdują się w tym samym folderze.
Zobacz przykład
Jeśli dodasz s do grep, to pomija błędy dotyczące brakujących plików
Właśnie eksperymentowałem z tym, aby wykonywać polecenia, które działają w wielu dystrybucjach, gdzie jest w jednym pliku w porównaniu do drugiego z powodu różnic w systemie operacyjnym.
Dzienniki poczty
Zarchiwizowane dzienniki poczty za pomocą 2> / dev / null, aby ukryć zgrep brakujące ostrzeżenia .gz
Odwołanie: Czy istnieje sposób odwoływania się do wielu plików w katalogu bez ponownego wpisywania całej ścieżki?
źródło