Przykład 1: Wyszukiwanie określonego ciągu w pliku
Jest to najczęstsze użycie polecenia egrep. To, co robisz, to określasz ciąg, który chcesz wyszukać, oraz nazwę pliku, w którym chcesz wyszukać ten ciąg. Wynik wyświetla następnie całą linię zawierającą wyszukiwany ciąg.
Składnia:
$ egrep nazwa pliku „ciąg_wyszukiwania”Przykład:
$ przykładowy plik egrep Debiana.tekstW tym przykładzie szukałem słowa „debian” w podanym pliku tekstowym. Możesz zobaczyć, jak wyniki wyświetlają całą linię zawierającą słowo „debian”:
Przykład 2: Wyszukiwanie określonego ciągu w wielu plikach
Za pomocą polecenia egrep możesz wyszukiwać ciąg znaków wśród wielu plików znajdujących się w tym samym katalogu. Trzeba tylko trochę bardziej szczegółowo podać „wzór” dla przeszukiwanych plików. Stanie się to bardziej zrozumiałe na przykładzie, który przedstawimy.
Składnia:
$ egrep "ciąg_wyszukiwania" wzorzec_nazwy_plikuPrzykład:
Tutaj będziemy szukać słowa „debian” we wszystkich .txt, określając wzorzec nazwy pliku w następujący sposób:
$ egrep „debian” *.tekst
Polecenie wydrukowało wszystkie wiersze, wraz z nazwami plików, które zawierają słowo „debian” ze wszystkich .pliki txt w bieżącym katalogu.
Przykład 3: Rekurencyjne przeszukiwanie łańcucha w całym katalogu
Jeśli chcesz wyszukać ciąg we wszystkich plikach z katalogu i jego podkatalogów, możesz to zrobić, używając flagi -r z poleceniem egrep.
Składnia:
$ egrep -r "ciąg_wyszukiwania" *Przykład:
W tym przykładzie szukam słowa „sample” w plikach całego katalogu bieżącego (Downloads).
$ egrep -r "próbka" *
Wyniki zawierają wszystkie wiersze, wraz z nazwami plików, które zawierają słowo „próbka” ze wszystkich plików w katalogu Pobrane i jego podkatalogach.
Przykład 4: Wykonywanie wyszukiwania bez rozróżniania wielkości liter
Z flagą -i możesz użyć polecenia egrep, aby wydrukować wyniki na podstawie szukanego ciągu bez martwienia się o wielkość liter.
Składnia:
$ egrep -i nazwa pliku „ciąg_wyszukiwania”Przykład:
Tutaj szukam słowa „debian” i chcę, aby wyniki wyświetlały wszystkie wiersze z pliku, które zawierają słowo „debian” lub „Debian”, niezależnie od wielkości liter.
$ egrep -i nazwa pliku „ciąg_wyszukiwania”
Możesz zobaczyć, jak flaga -i pomogła mi w pobraniu wszystkich wierszy zawierających wyszukiwany ciąg przez wyszukiwanie „niewrażliwe na wielkość liter”.
Przykład 5: Wyszukiwanie ciągu jako pełnego słowa, a nie jako podciągu
Kiedy zwykle szukasz ciągu przez egrep, wypisuje wszystkie słowa, które zawierają ciąg jako podciąg. Na przykład wyszukanie ciągu „on” spowoduje wydrukowanie wszystkich słów zawierających ciąg „on”, takich jak „on”, „only”, „monitor”, „clone” itp. Jeśli chcesz, aby wyniki wyświetlały tylko słowo „on” jako pełne słowo, a nie jako podciąg, możesz użyć flagi -w z egrep.
Składnia:
$ egrep -w nazwa pliku „ciąg_wyszukiwania”Przykład:
Tutaj szukam ciągu „on” w przykładowym pliku:
$ egrep -i “on” przykładowy plik.tekst
Jak widać na powyższym wyjściu, zawiera on również słowo „tylko”. Jednak nie o to mi chodzi, ponieważ szukam wyłącznie słowa „na”. Oto polecenie, którego użyję zamiast tego:
$ egrep -iw “on” przykładowy plik.tekst
Teraz moje wyniki wyszukiwania zawierają tylko wiersze zawierające słowo „on” jako całe słowo.
Przykład 6: Drukowanie tylko nazw plików zawierających łańcuch
Czasami chcemy pobrać tylko nazwy plików, które zawierają określony ciąg, zamiast drukować wiersze, które go zawierają. Można to zrobić za pomocą flagi -l (małe litery L) z poleceniem egrep.
Składnia:
$ egrep -l "ciąg_wyszukiwania" wzorzec_nazwy_plikuPrzykład:
Tutaj szukam ciągu „próbka” we wszystkich .pliki txt w bieżącym katalogu:
$ egrep -l próbka *.tekst
Wyniki wyszukiwania wyświetlają tylko nazwy plików zawierających określony ciąg.
Przykład 7: Drukowanie tylko ciągu wyszukiwania z pliku
Zamiast drukować cały wiersz zawierający wyszukiwany ciąg, możesz użyć polecenia egrep, aby wyświetlić sam ciąg. Ciąg zostanie wydrukowany tyle razy, ile pojawi się w określonym pliku.
Składnia:
$ egrep -o nazwa pliku "ciąg_wyszukiwania"Przykład:
W tym przykładzie szukam słowa „To” w moim pliku.
$ egrep -o Ten przykładowy plik_.tekst
Uwaga: To użycie polecenia jest przydatne, gdy szukasz ciągu opartego na wzorcu wyrażenia regularnego. Wyrażenia regularne wyjaśnimy szczegółowo w jednym z kolejnych przykładów.
Przykład 8: Wyświetlanie n liczby wierszy przed, po lub wokół szukanego ciągu
Czasami bardzo ważna jest znajomość kontekstu w pliku, w którym używany jest określony ciąg. Egrep jest przydatny w tym sensie, że można go użyć do wyświetlenia wiersza zawierającego wyszukiwany ciąg, a także określonej liczby wierszy przed, po i wokół niego.
Oto przykładowy plik tekstowy, którego użyję do wyjaśnienia nadchodzących przykładów:
N liczba wierszy Po wyszukiwanym ciągu:
Użycie flagi A w następujący sposób spowoduje wyświetlenie linii zawierającej szukany ciąg i liczbę N linii po nim:
$ egrep -APrzykład:
$ egrep -Przykładowy plik 2 "przykładowy".tekst
N liczba wierszy Przed szukanym ciągiem:
Użycie flagi B w następujący sposób spowoduje wyświetlenie wiersza zawierającego szukany ciąg i liczbę N wierszy przed nim:
$ egrep -BPrzykład:
$ egrep -B 2 "przykładowy" przykładowy plik.tekst
N liczba wierszy Przed szukanym ciągiem:
Użycie flagi C w następujący sposób spowoduje wyświetlenie wiersza zawierającego szukany ciąg oraz liczbę N wierszy przed i po nim:
$ egrep -CPrzykład:
$ egrep -C 2 "przykładowy" przykładowy plik.tekst
Przykład 9: Dopasowywanie wyrażenia regularnego w plikach
Polecenie egrep staje się potężniejsze, gdy szukasz wyrażeń regularnych zamiast pełnych ciągów wyszukiwania w pliku.
Składnia:
$ egrep Nazwa pliku "Wyrażenia regularne"Pozwól nam wyjaśnić, w jaki sposób możesz używać wyrażeń regularnych w wyszukiwaniu egrep:
Operator powtórzeń | Posługiwać się |
? | Poprzedni element przed ? jest opcjonalny i jest dopasowywany maksymalnie jeden raz
|
* | Poprzedni element przed * zostanie dopasowany zero lub więcej razy |
+ | Poprzedni element przed + zostanie dopasowany raz lub więcej razy |
n | Poprzedni element jest dokładnie dopasowany n razy. |
n, | Poprzedni element jest dopasowywany n lub więcej razy |
m. | Poprzedni element jest dopasowywany maksymalnie m razy |
n,m | Poprzedni element jest dopasowany co najmniej n razy, ale nie więcej niż m razy |
Przykład:
W poniższym przykładzie dopasowywane są wiersze zawierające następujące wyrażenie:
zaczynając od „Gnome” i kończąc na „ programy”
Przykład 10: Podświetlanie szukanego ciągu
Gdy ustawisz zmienną środowiskową GREP_OPTIONS jak poniżej, otrzymasz wynik z ciągiem/wzorem wyszukiwania podświetlonym w wynikach:
$ sudo export GREP_OPTIONS='--color=auto' GREP_COLOR='100;8'Następnie możesz wyszukać ciąg w dowolny sposób, który opisaliśmy w przykładach tego artykułu.
Przykład 11: Wykonywanie wyszukiwania odwróconego w pliku
Przez wyszukiwanie odwrócone rozumiemy, że polecenie egrep drukuje wszystko w pliku, z wyjątkiem wierszy zawierających ciąg wyszukiwania. Użyjemy następującego przykładowego pliku, aby wyjaśnić wyszukiwanie odwrócone przez egrep. Wydrukowaliśmy zawartość pliku za pomocą polecenia cat:
Składnia:
$ egrep -v nazwa pliku „ciąg_wyszukiwania”Przykład:
Z przykładowego pliku, o którym wspomnieliśmy, chcemy pominąć wiersz zawierający słowo „dwa” w wyjściu, dlatego użyjemy następującego polecenia:
$ egrep -v "dwa" przykładowy plik_.tekst
Możesz zobaczyć, jak dane wyjściowe zawierają wszystko z przykładowego pliku z wyjątkiem drugiego wiersza, który zawierał ciąg wyszukiwania „dwa”.
Przykład 12: Wykonywanie wyszukiwania odwróconego na podstawie wielu kryteriów/wzorca wyszukiwania
Za pomocą flagi -v możesz również sprawić, by polecenie egrep wykonało wyszukiwanie odwrotne na podstawie więcej niż jednego ciągu/wzorca wyszukiwania.
Aby wyjaśnić ten scenariusz, użyjemy tego samego przykładowego pliku, o którym wspomnieliśmy w przykładzie 11.
Składnia:
$ egrep -v -e "ciąg_szukaj"/"wzorzec" -e "ciąg_szukaj"/"wzór"… Nazwa pliku
Przykład:
Z przykładowego pliku, o którym wspomnieliśmy, chcemy pominąć wiersze zawierające słowa „jeden” i „dwa” w danych wyjściowych, dlatego użyjemy następującego polecenia:
$ egrep -v -e „jeden” -e „dwa” plik przykładowy_.tekstDodaliśmy dwa słowa do pominięcia za pomocą flagi -e, dlatego wynik będzie wyglądał następująco:
Przykład 13: Drukowanie liczby wierszy pasujących do szukanego ciągu
Zamiast drukować szukany ciąg z pliku lub wierszy go zawierających, możesz użyć polecenia egrep do zliczenia i wydrukowania liczby wierszy dopasowanych do ciągu. Ten licznik można pobrać za pomocą flagi -c z poleceniem egrep.
Składnia:
$ egrep -c nazwa pliku „ciąg_wyszukiwania”Przykład:
W tym przykładzie użyjemy flagi -c, aby zliczyć liczbę wierszy zawierających słowo „This” w naszym przykładowym pliku:
$ egrep -c „Ten” plik
Możesz również użyć funkcji wyszukiwania odwróconego, aby policzyć i wydrukować liczbę wierszy, które nie zawierają ciągu wyszukiwania:
$ grep -v -c Nazwa pliku „ciąg_wyszukiwania”
Przykład 14: Wyświetlanie numeru linii, w której ciąg jest dopasowany
Za pomocą flagi -n możesz sprawić, że polecenie egrep wyświetli dopasowany wiersz wraz z numerem wiersza, który zawiera szukany ciąg.
Składnia:
$ grep -n nazwa pliku „ciąg_wyszukiwania”Przykład:
$ grep -n „Ten” przykładowy plik_.tekst
Możesz zobaczyć, jak numery linii są wyświetlane w wynikach wyszukiwania.
Przykład 15: Wyświetlanie pozycji w pliku, w której pasuje wyszukiwany ciąg
Jeśli chcesz poznać pozycję w pliku, w której istnieje wyszukiwany ciąg, możesz użyć flagi -b z poleceniem egrep.
$ grep -o -b Nazwa pliku „ciąg_wyszukiwania”Przykład:
$ grep -o -b "Ten" przykładowy plik_.tekst
Wyniki wyszukiwania wyświetlają przesunięcie bajtów pliku, w którym istnieje wyszukiwane słowo.To było szczegółowe użycie polecenia egrep. Korzystając z kombinacji flag opisanych w tym artykule, możesz przeprowadzać bardziej sensowne i złożone wyszukiwania w swoich plikach.