Polecenie egrep należy do rodziny polecenia grep, które jest używane do wyszukiwania wzorców w Linuksie. Jeśli używałeś już polecenia grep, egrep działa tak samo jak grep -E (grep Extended regex’). Egrep skanuje określony plik, linia po linii, i wypisuje linię(i), które zawierają szukany ciąg/wyrażenie regularne. W tym artykule wyjaśnimy 15 użytecznych przykładów poleceń egrep, które pomogą początkującym, a nawet ekspertom w przeprowadzaniu sensownych wyszukiwań w Linuksie. Przykłady te wykonaliśmy na systemie Debian 10 Buster, ale można je łatwo odtworzyć na większości dystrybucji Linuksa.
- Przykład 1: Szukanie określonego ciągu w pliku
- Przykład 2: Szukanie określonego łańcucha w wielu plikach
- Przykład 3: Rekursywne wyszukiwanie ciągu znaków w całym katalogu
- Przykład 4: Wykonywanie wyszukiwania bez uwzględniania wielkości liter
- Przykład 5: Szukanie łańcucha jako pełnego słowa, a nie jako podłańcucha
- Przykład 6: Drukowanie tylko nazw plików, które zawierają łańcuch
- Przykład 7: Drukowanie tylko szukanego ciągu znaków z pliku
- Przykład 8: Wyświetlenie n liczby linii przed, po lub wokół wyszukiwanego łańcucha
- Przykład 9: Dopasowywanie wyrażeń regularnych w plikach
- Przykład 10: Podkreślanie wyszukiwanego ciągu
- Przykład 11: Wykonywanie wyszukiwania odwróconego w pliku
- Przykład 12: Wykonywanie wyszukiwania odwróconego na podstawie wielu kryteriów/wzorca wyszukiwania
- Przykład 13: Drukowanie liczby wierszy pasujących do wyszukiwanego ciągu
- Przykład 14: Wyświetlanie numeru wiersza, w którym dopasowano ciąg znaków
- Przykład 15: Wyświetlanie pozycji w pliku, w której szukany ciąg pasuje
Przykład 1: Szukanie określonego ciągu w pliku
Jest to najczęstsze zastosowanie polecenia egrep. To, co robisz, to określenie łańcucha, którego chcesz szukać, oraz nazwy pliku, w którym chcesz szukać tego łańcucha. W wyniku zostanie wyświetlony cały wiersz zawierający szukany ciąg znaków.
Syntaktyka:
Przykład:
W tym przykładzie szukałem słowa „debian” w podanym pliku tekstowym. Można zobaczyć, jak w wynikach wyświetlany jest cały wiersz zawierający słowo „debian”:
Przykład 2: Szukanie określonego łańcucha w wielu plikach
Dzięki poleceniu egrep można szukać łańcucha w wielu plikach znajdujących się w tym samym katalogu. Musisz tylko być nieco bardziej szczegółowy w podawaniu „wzorca” dla przeszukiwanych plików. Stanie się to bardziej jasne na przykładzie, który przedstawimy.
Syntaktyka:
Przykład:
W tym przypadku będziemy szukać słowa „debian” we wszystkich plikach .txt, podając wzorzec nazwy pliku w następujący sposób:
Polecenie wypisało wszystkie wiersze wraz z nazwami plików, które zawierają słowo „debian” ze wszystkich plików .txt w bieżącym katalogu.
Przykład 3: Rekursywne wyszukiwanie ciągu znaków w całym katalogu
Gdy chcesz wyszukać ciąg znaków we wszystkich plikach z katalogu i jego podkatalogów, możesz to zrobić, używając flagi -r z poleceniem egrep.
Syntaktyka:
Przykład:
W tym przykładzie szukam słowa „sample” w plikach całego katalogu current(Downloads).
Wyniki zawierają wszystkie wiersze, wraz z nazwami plików, które zawierają słowo „sample” ze wszystkich plików w katalogu Downloads i jego podkatalogach.
Przykład 4: Wykonywanie wyszukiwania bez uwzględniania wielkości liter
Z flagą -i można użyć polecenia egrep do wypisania wyników na podstawie wyszukiwanego łańcucha, nie przejmując się jego wielkością liter.
Syntaktyka:
Przykład:
Tutaj szukam słowa „debian” i chcę, aby wyniki wyświetlały wszystkie linie z pliku, które zawierają słowo „debian” lub „Debian”, niezależnie od wielkości liter.
Widzisz, jak flaga -i pomogła mi w pobraniu wszystkich linii, które zawierają szukany ciąg poprzez wyszukiwanie „niewrażliwe” na wielkość liter.
Przykład 5: Szukanie łańcucha jako pełnego słowa, a nie jako podłańcucha
Gdy normalnie szukasz łańcucha przez egrep, wypisuje on wszystkie słowa, które zawierają łańcuch jako podłańcuch. Na przykład, szukanie łańcucha „on” spowoduje wydrukowanie wszystkich słów zawierających łańcuch „on”, takich jak ” on”, „only”, „monitor”, „clone”, itd. Jeśli chcesz, aby wyniki wyświetlały tylko słowo „on” jako pełne słowo, a nie jako podłańcuch, możesz użyć flagi -w z egrep.
Syntaktyka:
Przykład:
Tutaj szukam ciągu „on” w przykładowym pliku:
W powyższym wyjściu widać, że zawiera ono również słowo „only”. Jednak to nie jest to, czego chcę, ponieważ szukam wyłącznie słowa „on”. Dlatego zamiast tego użyję następującego polecenia:
Teraz moje wyniki wyszukiwania zawierają tylko te wiersze, które zawierają słowo „on” jako całe słowo.
Przykład 6: Drukowanie tylko nazw plików, które zawierają łańcuch
Czasami chcemy pobrać tylko nazwy plików, które zawierają określony łańcuch, zamiast drukować linie, które go zawierają. Można to zrobić za pomocą flagi -l (mała litera L) polecenia egrep.
Syntaktyka:
Przykład:
Tutaj szukam łańcucha „sample” we wszystkich plikach .txt w bieżącym katalogu:
Wyniki wyszukiwania drukują tylko nazwy plików, które zawierają podany ciąg znaków.
Przykład 7: Drukowanie tylko szukanego ciągu znaków z pliku
Zamiast drukować cały wiersz zawierający szukany ciąg znaków, można użyć polecenia egrep do wydrukowania samego ciągu znaków. Łańcuch zostanie wypisany tyle razy, ile razy pojawi się w podanym pliku.
Syntaktyka:
Przykład:
W tym przykładzie szukam słowa „This” w moim pliku.
Uwaga: Ten sposób użycia polecenia jest przydatny, gdy szukamy ciągu znaków na podstawie wzorca wyrażenia regularnego. Wyrażenia regularne wyjaśnimy szczegółowo w jednym z najbliższych przykładów.
Przykład 8: Wyświetlenie n liczby linii przed, po lub wokół wyszukiwanego łańcucha
Czasami bardzo ważne jest poznanie kontekstu w pliku, w którym użyto określonego łańcucha. Egrep przydaje się w tym sensie, że można go użyć do wyświetlenia linii zawierającej szukany łańcuch, a także określonej liczby linii przed, po i wokół niego.
To jest przykładowy plik tekstowy, którego będę używał do wyjaśniania kolejnych przykładów:
N liczba wierszy Po szukanym ciągu:
Użycie flagi A w następujący sposób spowoduje wyświetlenie wiersza zawierającego szukany ciąg znaków oraz N liczby wierszy po nim:
Przykład:
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 N liczby wierszy przed nim:
Przykład:
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 N liczby wierszy przed i po nim:
Przykład:
Przykład 9: Dopasowywanie wyrażeń regularnych w plikach
Polecenie egrep staje się bardziej wydajne w miarę wyszukiwania wyrażeń regularnych zamiast stałych ciągów wyszukiwania w pliku.
Syntaktyka:
Wyjaśnijmy, jak można używać wyrażeń regularnych w wyszukiwaniu egrep:
Operator powtórzeń | Użyj |
? | Poprzedzający element przed ? jest opcjonalny i jest dopasowywany maksymalnie jeden raz |
* | Poprzedni element przed * będzie dopasowywany zero lub więcej razy |
+ | Poprzedni element przed + będzie dopasowany jeden lub więcej razy |
{n} | Poprzedni element jest dokładnie dopasowany n liczbę razy. |
{n,} | Poprzedni element jest dopasowywany n lub więcej razy |
{,m} | Poprzedni element jest dopasowywany maksymalnie m razy |
{n,m} | Poprzedni element jest dopasowywany 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:
poczynające się od „Gnome” i kończące się na ” programy”
Przykład 10: Podkreślanie wyszukiwanego ciągu
Po ustawieniu zmiennej środowiskowej GREP_OPTIONS jak poniżej, otrzymujemy dane wyjściowe z podświetlonym w wynikach wyszukiwanym ciągiem/wzorem:
Możesz następnie 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 to, że polecenie egrep wypisuje wszystko w pliku z wyjątkiem wierszy, które zawierają szukany łańcuch. Użyjemy następującego przykładowego pliku do wyjaśnienia wyszukiwania inwersyjnego za pomocą egrep. Zawartość pliku wydrukowaliśmy za pomocą polecenia cat:
Syntaktyka:
Przykład:
W przykładowym pliku, o którym wspomnieliśmy, chcemy pominąć w danych wyjściowych linię zawierającą słowo „dwa”, dlatego użyjemy następującego polecenia:
Widzimy, że wyjście zawiera wszystko z przykładowego pliku z wyjątkiem drugiego wiersza, który zawierał wyszukiwany ciąg „dwa”.
Przykład 12: Wykonywanie wyszukiwania odwróconego na podstawie wielu kryteriów/wzorca wyszukiwania
Z pomocą flagi -v można również sprawić, aby polecenie egrep wykonywało wyszukiwanie odwrócone na podstawie więcej niż jednego wyszukiwanego ciągu/wzorca.
Do wyjaśnienia tego scenariusza użyjemy tego samego przykładowego pliku, o którym wspominaliśmy w przykładzie 11.
Syntaktyka:
…. filename
Przykład:
W przykładowym pliku, o którym wspomnieliśmy, chcemy pominąć wiersz(e) zawierający(e) słowa „jeden” i „dwa” na wyjściu, dlatego użyjemy następującego polecenia:
Podaliśmy dwa słowa do pominięcia przy użyciu flagi -e, dlatego na wyjściu pojawią się następujące słowa:
Przykład 13: Drukowanie liczby wierszy pasujących do wyszukiwanego ciągu
Zamiast drukować wyszukiwany ciąg z pliku lub zawierające go wiersze, można użyć polecenia egrep do policzenia i wydrukowania liczby wierszy pasujących do tego ciągu. Liczbę tę można uzyskać za pomocą flagi -c z polecenia egrep.
Syntaktyka:
Przykład:
W tym przykładzie użyjemy flagi -c do policzenia liczby wierszy zawierających słowo „To” w naszym przykładowym pliku:
Możesz również użyć tutaj funkcji wyszukiwania inwersyjnego, aby policzyć i wydrukować liczbę wierszy, które nie zawierają wyszukiwanego ciągu:
Przykład 14: Wyświetlanie numeru wiersza, w którym dopasowano ciąg znaków
Dzięki fladze -n można sprawić, że polecenie egrep będzie drukowało dopasowany wiersz wraz z numerem wiersza, który zawiera szukany ciąg znaków.
Syntaktyka:
Przykład:
Można zobaczyć, jak numery wierszy są wyświetlane na tle wyników wyszukiwania.
Przykład 15: Wyświetlanie pozycji w pliku, w której szukany ciąg pasuje
Jeśli chcesz znać pozycję w pliku, w której istnieje szukany ciąg, możesz użyć flagi -b z poleceniem egrep.
Przykład:
Wyniki wyszukiwania wypisują offset bajtowy pliku, w którym występuje szukane słowo.To było szczegółowe użycie polecenia egrep. Używając kombinacji flag wyjaśnionych w tym artykule, możesz wykonywać bardziej znaczące i złożone wyszukiwania na swoich plikach.