Jaki jest najlepszy sposób uzyskania tylko końcowego dopasowania wyrażenia regularnego w pliku przy użyciu grep?
Czy można rozpocząć grepowanie od końca pliku zamiast od początku i zatrzymać po znalezieniu pierwszego dopasowania?
Możesz spróbować
grep pattern file | tail -1
lub
tac file | grep pattern | head -1
lub
tac file | grep -m1 pattern
tac file | grep -m 1 pattern
grep -n
) w rzeczywistym pliku, myślę, żetac
prawie trzeba było unikać, chyba że chciałem zrobić odejmowaniewc -l
. W przeciwnym razietac
zgrep -m1
ma sens.grep
przestanie działać po pierwszym meczu. bez-m 1
,grep
najpierw znajdzie wszystkie pasujące wzorce w pliku , a następniehead
pokaże tylko pierwsze - znacznie mniej wydajne. Dennis, zastanów się nad opublikowaniem tego w osobnej odpowiedzi!Dla kogoś pracującego z dużymi plikami tekstowymi w systemach Unix / Linux / Mac / Cygwin. Jeśli używasz systemu Windows, sprawdź to na temat narzędzi systemu Linux w systemie Windows: https://stackoverflow.com/questions/3519738/what-is-the-best-way-to-use-linux-utilities-under-windows .
Można wykonać ten przepływ pracy, aby uzyskać dobrą wydajność:
zq
pakietu.Cytat z jego pliku github:
Tworzenie indeksu
Zapytanie o indeks
źródło
Zawsze używam cat (ale to sprawia, że trochę dłużej):
cat file | grep pattern | tail -1
Zrzuciłbym winę na nauczyciela linux na kursie na studiach, który uwielbia koty :))))
- Nie musisz najpierw przechwycić pliku, zanim go grepujesz.
grep pattern file | tail -1
i jest również bardziej wydajny.źródło
cat
pliku i potokować gogrep
. Możeszgrep
przeszukać plik bezpośrednio przezgrep pattern file
(a następnie użyć,tail
aby zwrócić ostatni wynik), jak w odpowiedzi Cakemox.