Jak wydrukować pierwsze dopasowanie i zatrzymać z grep

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, headktó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

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *