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

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:

$ egrep „search_string” filename

Przykład:

$ egrep debian samplefile.txt

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:

$ egrep „search_string” filename_pattern

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:

$ egrep „debian” *.txt

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:

$ egrep -r „szukany_łańcuch” *

Przykład:

W tym przykładzie szukam słowa „sample” w plikach całego katalogu current(Downloads).

$ egrep -r „sample” *

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:

$ egrep -i „search_string” filename

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.

$ egrep -i „search_string” filename

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:

$ egrep -w „search_string” filename

Przykład:

Tutaj szukam ciągu „on” w przykładowym pliku:

$ egrep -i „on” samplefile.txt

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:

$ egrep -iw „on” samplefile.txt

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:

$ egrep -l „szukaj_łańcucha” filename_pattern

Przykład:

Tutaj szukam łańcucha „sample” we wszystkich plikach .txt w bieżącym katalogu:

$ egrep -l sample *.txt

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:

$ egrep -o „search_string” filename

Przykład:

W tym przykładzie szukam słowa „This” w moim pliku.

$ egrep -o This samplefile_.txt

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:

$ egrep -A <N> „search_string” filename

Przykład:

$ egrep -A 2 „sample” samplefile.txt

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:

$ egrep -B <N> „search_string” filename

Przykład:

$ egrep -B 2 „sample” samplefile.txt

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:

$ egrep -C <N> „search_string” filename

Przykład:

$ egrep -C 2 „sample” samplefile.txt

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:

$ egrep „RegularExpressions” filename

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:

$ sudo export GREP_OPTIONS=’–color=auto’ GREP_COLOR=’100;8′

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:

$ egrep -v „search_string” filename

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:

$ egrep -v „dwa” samplefile_.txt

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:

$ egrep -v -e „search_string”/”pattern” -e „search_string”/”pattern”
…. 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:

$ egrep -v -e „jeden” -e „dwa” samplefile_.txt

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:

$ egrep -c „search_string” filename

Przykład:

W tym przykładzie użyjemy flagi -c do policzenia liczby wierszy zawierających słowo „To” w naszym przykładowym pliku:

$ egrep -c „This” filename

Możesz również użyć tutaj funkcji wyszukiwania inwersyjnego, aby policzyć i wydrukować liczbę wierszy, które nie zawierają wyszukiwanego ciągu:

$ grep -v -c „search_string” filename

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:

$ grep -n „search_string” filename

Przykład:

$ grep -n „This” samplefile_.txt

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.

$ grep -o -b „search_string” filename

Przykład:

$ grep -o -b „This” samplefile_.txt

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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.