W systemach operacyjnych Unix-like polecenie egrep wyszukuje wzorzec tekstowy, używając rozszerzonych wyrażeń regularnych do wykonania dopasowania. Uruchomienie egrep jest równoważne uruchomieniu grep z opcją -E.
Niniejsza strona dotyczy wersji egrep dla GNU/Linuksa.
Syntaktyka
egrep PATTERN
Opcje
-A NUM, –after-context=NUM |
Wypisuje NUM wierszy kontekstu po pasujących wierszach. Umieszcza linię zawierającą — między sąsiadującymi grupami dopasowań. |
-a, –text | Przetwarza plik binarny tak, jakby był tekstem; jest to równoważne opcji –binary-files=text. |
-B NUM, –before-context=NUM |
Wydrukuj NUM linii wiodącego kontekstu przed liniami dopasowania. Umieszcza linię zawierającą — między sąsiadującymi grupami dopasowań. |
-C NUM, –context=NUM | Wydrukuj NUM linii kontekstu wyjściowego. Umieszcza linię zawierającą — między sąsiadującymi grupami dopasowań. |
-b, –byte-offset | Wydrukuj offset bajtowy w pliku wejściowym przed każdą linią wyjścia. |
–binary-files=TYPE | Jeśli pierwsze kilka bajtów pliku wskazuje, że zawiera on dane binarne, przyjmij, że plik jest typu TYPE. Domyślnie TYP jest binarny, a grep zwykle wypisuje albo jednowierszowy komunikat mówiący, że plik binarny pasuje, albo brak komunikatu, jeśli nie ma dopasowania. Jeśli TYPE jest bez dopasowania, grep przyjmuje, że plik binarny nie pasuje; jest to równoważne opcji -I. Jeżeli TYPE jest tekstem, grep przetwarza plik binarny tak, jakby był tekstem; jest to równoważne opcji -a. Ostrzeżenie: grep –binary-files=text może wypisać binarne śmieci, co może mieć paskudne efekty uboczne jeśli wyjściem jest terminal i jeśli sterownik terminala interpretuje niektóre z nich jako polecenia. |
–color, –color |
Otocz pasujący łańcuch znacznikiem znalezionym w zmiennej środowiskowej GREP_COLOR. WHEN może być 'nigdy’, 'zawsze’, lub 'auto’ |
-c, –count | Wyłącz normalne wyjście; zamiast tego wypisz liczbę pasujących linii dla każdego pliku wejściowego. Z opcją -v, –invert-match (zobacz poniżej), zliczaj linie niedopasowane. |
-D ACTION, –devices=ACTION |
Jeśli plik wejściowy jest urządzeniem, FIFO lub gniazdem, użyj ACTION do jego przetworzenia. Domyślnie ACTION ma wartość read, co oznacza, że urządzenia są czytane tak, jakby były zwykłymi plikami. Jeśli ACTION jest pomijane, urządzenia są cicho pomijane. |
-d ACTION, –katalogi=ACTION |
Jeśli plik wejściowy jest katalogiem, użyj ACTION do jego przetworzenia. Domyślnie, ACTION to read, co oznacza, że katalogi są odczytywane tak, jakby były zwykłymi plikami. Jeśli DZIAŁANIE jest pomijane, to katalogi są bezgłośnie pomijane. Jeśli ACTION jest recurse, grep czyta rekursywnie wszystkie pliki pod każdym katalogiem; jest to równoważne opcji -r. |
-e PATTERN, –regexp=PATTERN |
Użyj PATTERN jako wzorca; przydatne do ochrony wzorców zaczynających się od „-„. |
-F, –fixed-strings | Interpretuj PATTERN jako listę stałych łańcuchów, oddzielonych znakami nowej linii, które mogą być dopasowane. |
-P, –perl-regexp | Interpretuje PATTERN jako wyrażenie regularne Perla. |
-f FILE, –file=FILE | Pobiera wzorce z pliku FILE, po jednym na wiersz. Pusty plik zawiera zero wzorców, a więc nie pasuje do niczego. |
-G, –basic-regexp | Interpretuje PATTERN jako podstawowe wyrażenie regularne (zobacz poniżej). Jest to wartość domyślna. |
-H, –with-filename | Wypisuje nazwę pliku dla każdego dopasowania. |
-h, –no-filename | Wyłącza prefiksowanie nazw plików na wyjściu, gdy przeszukiwanych jest wiele plików. |
–help | Wypisuje krótki komunikat pomocy. |
-I | Przetwarzaj plik binarny tak, jakby nie zawierał pasujących danych; jest to równoważne opcji –binary-files=without-match. |
-i, –ignore-case | Ignoruj rozróżnianie wielkości liter zarówno w pliku PATTERN, jak i w plikach wejściowych. |
-L, –files-without-match |
Zatrzymuje normalne wyjście; zamiast tego wypisuje nazwę każdego pliku wejściowego, z którego normalnie nie zostałoby wydrukowane żadne wyjście. Skanowanie zatrzymuje się po pierwszym dopasowaniu. |
-l, –files-with-matches | Zatrzymaj normalne dane wyjściowe; zamiast tego wypisz nazwę każdego pliku wejściowego, z którego normalnie zostałyby wydrukowane dane wyjściowe. Skanowanie zatrzymuje się na pierwszym dopasowaniu. |
-m NUM, –max-count=NUM |
Zatrzymaj czytanie pliku po NUM pasujących liniach. Jeśli wejściem jest standardowe wejście z pliku regularnego, a na wyjściu jest NUM pasujących linii, grep zapewnia, że standardowe wejście jest ustawione za ostatnią pasującą linią przed zakończeniem pracy, bez względu na obecność powracających linii kontekstowych. Umożliwia to procesowi wywołującemu wznowienie szukania. Gdy grep zatrzymuje się po NUM pasujących liniach, wypisuje wszystkie powracające linie kontekstowe. Gdy użyto również opcji -c lub –count, grep nie wypisuje liczby większej od NUM. Gdy użyto również opcji -v lub –invert-match, grep zatrzymuje się po wypisaniu NUM niedopasowanych linii. |
–mmap | Jeśli to możliwe, do odczytu wejścia użyj systemowego wywołania mmap, zamiast domyślnego systemowego wywołania read. W niektórych sytuacjach, –mmap daje lepszą wydajność. Jednakże, –mmap może spowodować niezdefiniowane zachowanie (włączając zrzuty rdzenia), jeśli plik wejściowy skurczy się podczas działania grepa, lub jeśli wystąpi błąd wejścia/wyjścia. |
-n, –line-number | Następuj każdy wiersz wyjścia numerem wiersza w jego pliku wejściowym. |
-o, –only-matching | Pokazuje tylko tę część pasującego wiersza, która pasuje do PATTERN. |
–label=LABEL | Wyświetla dane wejściowe pochodzące ze standardowego wejścia jako dane wejściowe pochodzące z pliku LABEL. Jest to szczególnie przydatne dla narzędzi takich jak zgrep, np. gzip -cd foo.gz |grep -H –label=foo something |
–line-buffered | Użyj buforowania linii. Może to pociągnąć za sobą karę za wydajność. |
-q, –quiet, –silent | Bądź cichy; nie zapisuj niczego na standardowym wyjściu. Wyjdź natychmiast z zerowym kodem jeśli znaleziono jakiekolwiek dopasowanie, nawet jeśli wykryto błąd. Zobacz też opcję -s lub –no-messages. |
-R, -r, –recursive | Odczytaj rekurencyjnie wszystkie pliki pod każdym katalogiem; jest to odpowiednik opcji -d recurse. Zmodyfikowane przez: –include=PATTERN Wyszukuje w katalogach tylko pliki pasujące do PATTERN. –exclude=PATTERN Wyszukuje w katalogach pomijając pliki pasujące do PATTERN. |
-s, –no-messages | Wyłącza komunikaty o błędach dotyczące nieistniejących lub nieczytelnych plików. Uwaga dotycząca przenośności: w przeciwieństwie do GNU grep, tradycyjny grep nie był zgodny z POSIX.2, ponieważ tradycyjny grep nie posiadał opcji -q, a jego opcja -s zachowywała się jak opcja -q grepa GNU. Skrypty powłoki mające być przenośne do tradycyjnego grepa powinny unikać zarówno -q jak i -s, a zamiast tego powinny przekierowywać wyjście do /dev/null. |
-U, –binary | Traktuj plik(i) jako binarny. Domyślnie, pod MS-DOS i Microsoft Windows, grep zgaduje typ pliku, patrząc na zawartość pierwszych 32 KB odczytanych z pliku. Jeśli grep uzna, że plik jest plikiem tekstowym, usuwa znaki CR z oryginalnej zawartości pliku (aby wyrażenia regularne z ^ i $ działały poprawnie). Podanie opcji -U unieważnia te domysły, powodując, że wszystkie pliki są odczytywane i przekazywane do mechanizmu dopasowującego dosłownie; jeśli plik jest plikiem tekstowym z parami CR/LF na końcu każdego wiersza, powoduje to, że niektóre wyrażenia regularne zawodzą. Opcja ta nie ma wpływu na platformy inne niż MS-DOS i MS-Windows. |
-u, –unix-byte-offsets | Raportuje offsety bajtów w stylu uniksowym. Przełącznik ten powoduje, że grep raportuje przesunięcia bajtów tak, jakby plik był plikiem tekstowym w stylu uniksowym, tj. z usuniętymi znakami CR. Daje to wyniki identyczne z uruchomieniem grepa na maszynie uniksowej. Opcja ta nie ma wpływu, chyba że użyto również opcji -b; nie ma ona wpływu na platformy inne niż MS-DOS i MS-Windows. |
-V, –version | Wypisuje numer wersji grepa na błąd standardowy. Ten numer wersji powinien być dołączany do wszystkich raportów błędów (zobacz poniżej). |
-v, –invert-match | Odwraca sens dopasowania, aby wybrać linie niedopasowane. |
-w, –word-regexp | Wybiera tylko linie zawierające dopasowania tworzące całe słowa. Test polega na tym, że pasujący podłańcuch musi być albo na początku linii, albo poprzedzony znakiem składowym niebędącym słowem. Podobnie, musi on być albo na końcu wiersza, albo po nim musi następować znak składowy niebędący słowem. Znaki składowe słowa to litery, cyfry i podkreślenie. |
-x, –line-regexp | Wybieraj tylko te dopasowania, które dokładnie pasują do całej linii. |
-y | Przestarzały synonim dla -i. |
-Z, –null | Wypisuje bajt zerowy (znak ASCII NULL) zamiast znaku, który normalnie występuje po nazwie pliku. Na przykład, grep -lZ wypisuje bajt zerowy po każdej nazwie pliku zamiast zwykłej nowej linii. Opcja ta czyni wyjście jednoznacznym, nawet w obecności nazw plików zawierających nietypowe znaki, takie jak nowe linie. Opcji tej można używać z poleceniami takimi jak find -print0, perl -0, sort -z i xargs -0 do przetwarzania dowolnych nazw plików, nawet tych, które zawierają znaki nowej linii. |
Wyrażenia regularne
Wyrażenie regularne jest wzorcem opisującym zbiór łańcuchów. Wyrażenia regularne są konstruowane analogicznie do wyrażeń arytmetycznych, przy użyciu różnych operatorów do łączenia mniejszych wyrażeń.
Grep rozumie dwie różne wersje składni wyrażeń regularnych: „podstawową” i „rozszerzoną”. W GNU grep, nie ma różnicy w dostępnej funkcjonalności przy użyciu obu składni. W innych implementacjach, podstawowe wyrażenia regularne mają mniejsze możliwości. Poniższy opis dotyczy rozszerzonych wyrażeń regularnych, które są używane w egrep; różnice dla podstawowych wyrażeń regularnych są podsumowane później.
Podstawowymi blokami konstrukcyjnymi są wyrażenia regularne dopasowujące pojedynczy znak. Większość znaków, w tym wszystkie litery i cyfry, są wyrażeniami regularnymi, które pasują same do siebie. Każdy metaznak o specjalnym znaczeniu może być cytowany przez poprzedzenie go odwrotnym ukośnikiem.
Wyrażenie nawiasowe jest listą znaków zamkniętą przez . Dopasowuje ono dowolny pojedynczy znak z tej listy; jeśli pierwszym znakiem listy jest caret ^, to dopasowuje ono dowolny znak nie znajdujący się na liście. Na przykład, wyrażenie regularne pasuje do każdej pojedynczej cyfry.
Wewnątrz wyrażenia nawiasowego, wyrażenie zakresu składa się z dwóch znaków oddzielonych myślnikiem („-„). Dopasowuje ono dowolny pojedynczy znak, który sortuje pomiędzy tymi dwoma znakami, włącznie, używając sekwencji kolokacji i zestawu znaków locale. Na przykład, w domyślnych ustawieniach lokalnych C, odpowiada . Wiele locale sortuje znaki w kolejności słownikowej, i w tych locale często nie jest równoważne ; może być równoważne , na przykład. Aby uzyskać tradycyjną interpretację wyrażeń nawiasowych, można użyć locale C, ustawiając zmienną środowiskową LC_ALL na wartość C.
Wreszcie, pewne nazwane klasy znaków są predefiniowane wewnątrz wyrażeń nawiasowych, jak poniżej. Ich nazwy nie wymagają wyjaśnień, a są to , , , , , , , , , , , , i . Na przykład, ] oznacza , z tym, że ta druga postać zależy od locale C i kodowania znaków ASCII, podczas gdy pierwsza jest niezależna od locale i zestawu znaków. (Zauważ, że nawiasy w tych nazwach klas są częścią nazw symbolicznych i muszą być dołączone do nawiasów ograniczających listę nawiasów). Większość metaznaków traci swe specjalne znaczenie wewnątrz list. Aby dołączyć dosłowne ], umieść je na początku listy. Podobnie, aby dołączyć dosłowne ^, umieść je gdziekolwiek, byle nie na początku. Wreszcie, aby dołączyć dosłowne – umieść je na końcu.
Kropka . pasuje do dowolnego pojedynczego znaku. Symbol ^ jest synonimem dla ] i ^W jest synonimem dla ].
Dzielnik ^ i znak dolara („$”) są metaznakami, które odpowiednio dopasowują pusty łańcuch na początku i końcu linii. Symbole \< i \> odpowiednio dopasowują pusty łańcuch na początku i końcu słowa. Symbol \b pasuje do pustego łańcucha na krawędzi słowa, a \b pasuje do pustego łańcucha pod warunkiem, że nie znajduje się on na krawędzi słowa.
Po wyrażeniu regularnym może następować jeden z kilku operatorów powtórzeń:
? | Poprzedni element jest opcjonalny i dopasowywany co najwyżej raz. |
* | Poprzedni element zostanie dopasowany zero lub więcej razy. |
+ | Poprzedni element zostanie dopasowany jeden lub więcej razy. |
{n} | Poprzedni element jest dopasowywany dokładnie n razy. |
{n,} | Poprzedni element jest dopasowywany n lub więcej razy. |
{n,m} | Poprzedni element jest dopasowywany co najmniej n razy, ale nie więcej niż m razy. |
Dwa wyrażenia regularne mogą być konkatenowane; wynikowe wyrażenie regularne pasuje do dowolnego łańcucha utworzonego przez konkatenację dwóch podłańcuchów, które odpowiednio pasują do konkatenowanych podwyrażeń.
Dwa wyrażenia regularne mogą być połączone operatorem infiksowym |; wynikowe wyrażenie regularne pasuje do dowolnego łańcucha pasującego do któregokolwiek z podwyrażeń.
Powtórzenie ma pierwszeństwo przed konkatenacją, która z kolei ma pierwszeństwo przed alternacją. Całe podwyrażenie może być ujęte w nawiasy, aby obejść te zasady pierwszeństwa.
Odniesienie wsteczne \n, gdzie n jest pojedynczą cyfrą, dopasowuje podłańcuch poprzednio dopasowany przez n-te nawiasowe podwyrażenie wyrażenia regularnego.
W podstawowych wyrażeniach regularnych metaznaki ?, +, {, |, (, i ) tracą swoje specjalne znaczenie; zamiast nich należy używać wersji z odwrotnym ukośnikiem \n?
Tradycyjny egrep nie obsługuje metaznaku {, a niektóre implementacje egrep obsługują zamiast niego {, więc skrypty przenośne powinny unikać { we wzorcach egrep i powinny używać do dopasowania dosłownego {.
GNU egrep próbuje wspierać tradycyjne użycie przez założenie, że { nie jest specjalne, jeśli byłoby początkiem nieprawidłowej specyfikacji przedziału. Na przykład, polecenie powłoki egrep '{1′ szuka dwuznakowego łańcucha {1 zamiast zgłaszać błąd składni w wyrażeniu regularnym. POSIX.2 dopuszcza takie zachowanie jako rozszerzenie, ale skrypty przenośne powinny go unikać.
Zmienne środowiskowe
Na zachowanie Grepa mają wpływ następujące zmienne środowiskowe:
Lokale LC_foo są określane przez zbadanie trzech zmiennych środowiskowych LC_ALL, LC_foo, LANG, w tej kolejności. Pierwsza z tych zmiennych, która jest ustawiona, określa locale. Na przykład, jeśli LC_ALL nie jest ustawione, ale LC_MESSAGES jest ustawione na pt_BR, to dla locale LC_MESSAGES używany jest brazylijski portugalski. Jeśli nie ustawiono żadnej z tych zmiennych środowiskowych, lub jeśli nie zainstalowano katalogu locale, lub jeśli grep nie został skompilowany z obsługą języków narodowych (NLS), używane jest locale C.
GREP_OPTIONS
Zmienna ta określa opcje domyślne, umieszczane przed opcjami jawnymi. Na przykład, jeśli GREP_OPTIONS ma wartość ’–binary-files=without-match –directories=skip’, grep zachowuje się tak, jakby dwie opcje –binary-files=without-match i –directories=skip podano przed opcjami jawnymi. Specyfikacje opcji oddzielane są białymi spacjami. Odwrotny ukośnik powoduje ucieczkę od następnego znaku, więc może być użyty do określenia opcji zawierającej białe znaki lub odwrotny ukośnik.
GREP_COLOR
Określa znacznik dla podświetlania.
LC_ALL, LC_COLLATE, LANG
Te zmienne określają locale LC_COLLATE, które określają sekwencję sortowania używaną do interpretacji wyrażeń zakresu, takich jak .
LC_ALL, LC_CTYPE, LANG
Te zmienne określają locale LC_CTYPE, które określają typ znaków, np, które znaki są białymi spacjami.
LC_ALL, LC_MESSAGES, LANG
Zmienne te określają locale LC_MESSAGES, które określają język, jakiego grep używa dla komunikatów. Domyślne locale C używa komunikatów American English.
POSIXLY_CORRECT
Jeśli jest ustawiona, grep zachowuje się tak, jak wymaga tego POSIX.2; w przeciwnym razie, grep zachowuje się bardziej jak inne programy GNU. POSIX.2 wymaga, by opcje występujące po nazwach plików były traktowane jak nazwy plików; domyślnie, opcje takie są przenoszone na początek listy operandów i traktowane jak opcje. POSIX.2 wymaga też, by nierozpoznane opcje były diagnozowane jako „nielegalne”, ale ponieważ nie są one tak naprawdę sprzeczne z prawem, domyślnie diagnozuje się je jako „nieważne”. POSIXLY_CORRECT wyłącza także _N_GNU_nonoption_argv_flags_, opisane poniżej.
_N_GNU_nonoption_argv_flags_
(Tu N jest numerycznym identyfikatorem procesu grepa.) Jeśli i-ty znak wartości tej zmiennej środowiskowej wynosi 1, to nie należy uważać i-tego operandu grepa za opcję, nawet jeśli na taką wygląda. Powłoka może umieścić tę zmienną w środowisku dla każdego uruchamianego polecenia, określając, które operandy są wynikami interpretacji symboli wieloznacznych nazw plików i dlatego nie powinny być traktowane jako opcje. Zachowanie to jest dostępne tylko z biblioteką GNU C i tylko wtedy, gdy nie jest ustawione POSIXLY_CORRECT.
Przykłady
egrep "support|help|windows" myfile.txt
Szukaj wzorców pomocy i okien w pliku myfile.txt.
egrep '^+$' myfile.txt
Zapamiętaj wszystkie linie w pliku myfile.txt, które rozpoczynają się od słowa alfabetycznego, które również kończy linię.
egrep -c '^begin|end$' myfile.txt
Oblicz liczbę linii w pliku myfile.txt, które zaczynają się słowem 'begin’ lub kończą słowem 'end’.
fgrep – Filtrowanie tekstu pasującego do łańcucha o ustalonych znakach.
grep – Filtrowanie tekstu pasującego do wyrażenia regularnego.
sed – Narzędzie do filtrowania i przekształcania tekstu.
sh – Interpreter poleceń powłoki Bourne’a.
.