Jak wydrukować pierwsze dopasowanie i zatrzymać z grep
grep
to narzędzie wyszukiwania w Linuksie używane do dopasowywania treści. Domyślnie wypisze dowolny pasujący wiersz, który może wymagać dużej ilości danych wyjściowych. Jeśli interesuje Cię tylko pierwszy mecz, możesz ograniczyć wynik tylko do pierwszego wiersza.
Ograniczanie wyjścia za pomocą grep -m
Polecenie grep
ma opcję -m
lub --max-count
, która może rozwiązać ten problem, ale może nie działać zgodnie z oczekiwaniami.
Ta opcja grep
zatrzymuje dopasowanie po znalezieniu N pasujących ciągów, co działa świetnie, ponieważ ogranicza wynik do jednego ciągu, zawsze zawierającego pierwsze dopasowanie. Możemy to przetestować za pomocą -n
flagi, aby wydrukować numery linii.
grep -m 1 "foo"file
Ma to jednak pewne wady, o których powinieneś wiedzieć. Nie kończy się po N meczach, zatrzymuje się po N liniach. Spowoduje to grep
wiele dopasowań w każdym wierszu, co może stanowić problem w przypadku użycia -o
flagi, która wypisuje każde dopasowanie w nowym wierszu.
Ponadto jest to tylko N wierszy na plik, więc gdy jest używany z wieloma plikami, wydrukuje pierwszy pasujący wiersz dla każdego pliku.
Używanie głowy do ograniczania wydajności grep
Alternatywą jest potokowanie wyjścia do innego polecenia, head
które po prostu odcina dane wejściowe po N wierszach. Jednak nadal jest to trochę korzystne, -m 1
ponieważ grep
przestanie przetwarzać duże pliki, jeśli dopasowanie zostanie znalezione wcześnie.
grep "foo"file_one.txt | head -1
Działa to z -o
flagą wyświetlającą tylko pierwsze dopasowanie, nawet jeśli w pliku jest wiele dopasowań:
Należy jednak zachować ostrożność podczas korzystania z wielu plików. Użycie head
spowoduje wydrukowanie pierwszego dopasowanego wiersza w dowolnym pliku. Może to stanowić problem, ponieważ dane grep
wyjściowe są drukowane w kolejności, w jakiej przetwarzają pliki, i możesz nie znać kolejności przetwarzania plików, chyba że ręcznie je posortujesz przed przekazaniem ich do programu grep
.
Podobnie możesz również użyć tail
do wydrukowania ostatniej pasującej linii.
Dodaj komentarz