Przejdź do pierwszej, poprzedniej, następnej, ostatniej sekcji, spisu treści.


2. Wywołanie grep

grep jest wyposażony w bogaty zestaw opcji z rozszerzeniami POSIX.2 i GNU.

`-c'
`--count'
Wyłącza normalne wyjście; zamiast niego dla każdego pliku wejściowego wypisuje liczbę pasujących linii. Z opcją `-v', `--invert-match' zlicza linie niepasujące.
`-e wzorzec'
`--regexp=wzorzec'
Używa wzorca jako wzorca; użyteczne do ochronienia wzorów zaczynających się od `-'.
`-f plik'
`--file=plik'
Pobiera wzorce z pliku, po jednym z każdej linii. Plik pusty zawiera zero wzorców, nie pasując do niczego.
`-i'
`--ignore-case'
Ignoruje rozróżnienia w wielkości liter we wzorcu oraz w plikach wejściowych.
`-l'
`--files-with-matches'
Wyłącza normalne wyjście; zamiast niego wypisuje nazwę każdego pliku, z którego normalnie wypisano by jakieś wyjście. Przeszukiwanie zakończy się na pierwszej pasującej linii.
`-n'
`--line-number'
Poprzedza każdą linię wyjścia numerem linii z odpowiedniego pliku wejściowego.
`-q'
`--quiet'
`--silent'
Po cichu; wyłącza normalne wyjście. Przeszukiwanie zakończy się na pierwszej pasującej linii. Zobacz także opcja `-s' lub `--no-messages'.
`-s'
`--no-messages'
Wyłącza komunikaty błędów o plikach nieistniejących lub nie do odczytania. Uwaga o przenośności: w przeciwieństwie do GNU grep, tradycyjny grep nie był zgodny z POSIX.2, gdyż brakowało mu opcji `-q', a opcja `-s' zachowywała się jak opcja `-q' z GNU grep. Skrypty powłoki, które mają być przenośne na tradycyjny grep powinny unikać zarówno `-q', jak i `-s' i zamiast tego przekierowywać wyjście do `/dev/null'.
`-v'
`--invert-match'
Odwraca sens dopasowania, wybiera linie niepasujące.
`-x'
`--line-regexp'
Wybiera tylko te dopasowania, które dokładnie pasują do całej linii.

2.1. Rozszerzenia GNU

`-A num'
`--after-context=num'
Wypisuje po pasujących liniach num linii następującego kontekstu.
`-B num'
`--before-context=num'
Wypisuje przed pasującymi liniami num linii poprzedzającego je kontekstu.
`-C num'
`--context=[num]'
Wypisuje num linii (domyślnie 2) kontekstu w wyjściu.
`-num'
To samo, co `--context=num' linii kontekstu przed i po dopasowaniu. Jednak grep nigdy nie wypisze żadnej z linii więcej niż raz.
`-V'
`--version'
Wypisuje numer wersji grep na standardowe wyjście błędów. Numer wersji powinno się załączać we wszystkich zgłoszeniach błędów.
`--help'
Wypisuje komunikat o sposobie użycia, pokrótce wymieniający omawiane opcje wiersza poleceń i wskazujący adres do zgłoszeń błędów, a następnie kończy działanie.
`--binary-files=typ'
Jeśli pierwszych kilka bajtów pliku wskazuje, że zawiera on dane binarne, to zakładane jest, że jest to plik typu typ. Domyślnym typem jest binarny (`binary'), a grep normalnie albo wypisuje jednolinijkowy komunikat mówiący o dopasowaniu pliku binarnego, albo nie wypisuje komunikatu, gdy nie znaleziono dopasowania. Jeżeli typem jest `without-match' (bez dopasowania), to grep zakłada, że ten plik binarny nie pasuje; jest to równoważne działaniu opcji `-I'. Jeśli typem jest `text', to grep przetwarza plik binarny tak, jakby był on tekstowy; jest to równoważne opcji `\-a'. Ostrzeżenie: Może się zdarzyć, że wypisane przez `--binary-files=text' śmiecie binarne dadzą przykre skutki uboczne jeżeli wyjściem będzie terminal a jego sterownik zinterpretuje niektóre z nich jako swoje polecenia.
`-b'
`--byte-offset'
Wypisuje przed każdą linią wyjścia jej offset bajtowy w pliku wejściowym. Gdy grep uruchamiany jest w MS-DOS lub MS-Windows, wypisywane offsety bajtowe zależą od tego, czy użyto opcji `-u' (`--unix-byte-offsets'); zobacz niżej.
`-d akcja'
`--directories=akcja'
Jeśli plik wejściowy jest katalogiem, stosuje to jego przetworzenia akcję. Domyślną akcją jest `read', co znaczy, że katalogi są czytane dokładnie tak samo, jakby były zwykłymi plikami (niektóre systemy operacyjne i systemy plików nie pozwalają na takie działanie, co spowoduje, że grep dla każdego katalogu będzie wypisywał komunikaty o błędzie). Jeśli wartością akcji jest `skip', to katalogi są milcząco pomijane. Jeśli wartością akcji jest `recurse', to grep czyta wszystkie pliki pod każdym katalogiem, rekurencyjnie; jest to równoważne opcji `-r'.
`-H'
`--with-filename'
Dla każdego dopasowania wypisuje nazwę pliku.
`-h'
`--no-filename'
Wyłącza poprzedzanie wyników nazwami plików podczas przeszukiwania wielu plików.
`-L'
`--files-without-match'
Wyłącza normalne wyjście; zamiast niego wypisuje nazwę każdego pliku, z którego normalnie nie wypisano by żadnego wyjścia. Przeszukiwanie zakończy się na pierwszej pasującej linii.
`-a'
`--text'
Przetwarza plik binarny tak, jakby był on tekstowy; jest to równoważnik opcji `--binary-files=text'.
`-I'
Przetwarza plik binarny tak, jakby nie zawierał on pasujących danych; jest to równoważne opcji `--binary-files=without-match'.
`-w'
`--word-regexp'
Wybiera tylko te linie, w których dopasowania wzorca tworzą całe wyrazy. Przeprowadzany test polega na tym, że dopasowywany podciąg musi albo znajdować się na początku linii, albo być poprzedzony znakiem nie tworzącym wyrazu. Podobnie, musi albo znajdować się na końcu linii, albo musi następować po nim znak nie tworzący słowa. Znakami tworzącymi wyrazy są litery, cyfry i znak podkreślenia.
`-r'
`--recursive'
Dla każdego katalogu wymienionego w wierszu poleceń, rekurencyjnie czyta i przetwarza wszystkie jego pliki. Jest to to samo, co opcja `-d recurse'.
`-y'
Przestarzały synonim `-i'.
`-U'
`--binary'
Traktuje pliki jako binarne. Domyślnie, w MS-DOS i MS-Windows, grep zgaduje typ pliku spoglądając na zawartość pierwszych 32 kB przeczytanych z pliku. Jeśli zdecyduje, że plik jest tekstowy, usuwa znaki CR z oryginalnej zawartości pliku (po to żeby wyrażenia regularne z ^ i $ działały poprawnie). Podanie `-U' wyłącza to zgadywanie, powodując, że wszystkie pliki są czytane i przekazywane mechanizmowi dopasowywującemu dosłownie; jeśli plik jest plikiem tekstowym z parami CR/LF na końcu linii, spowoduje to, że niektóre wyrażenia regularne nie zadziałają. Opcja ta nie działa na platformach innych niż MS-DOS i MS-Windows.
`-u'
`--unix-byte-offsets'
Raportuje offsety bajtowe w stylu uniksowym. Przełącznik ten powoduje, że grep raportuje offsety bajtowe tak, jakby plik był plikiem tekstowym typu uniksowego, tj. z usuniętymi znakami CR. Da to rezultaty identyczne jak uruchomienie grep na maszynie uniksowej. Opcja ta nie wywołuje żadnego efektu, chyba że użyto także opcji `-b'; nie działa na platformach innych niż MS-DOS i MS-Windows.
`--mmap'
Jeśli to możliwe, do odczytu wejścia korzysta z funkcji systemowej mmap zamiast domyślnej read. W pewnych sytuacjach `--mmap' daje lepszą wydajność. Może jednak spowodować niezdefiniowane zachowanie (łącznie ze zrzutem rdzenia) jeśli podczas działania grep plik wejściowy się skurczy lub wystąpi błąd wejścia/wyjścia.
`-Z'
`--null'
Wypisuje bajt zerowy (znak ASCII NUL) zamiast znaku, który normalnie występuje po nazwie pliku. Na przykład, `grep -lZ' wypisuje po nazwie pliku bajt zerowy, zamiast, jak zwykle, znaku nowej linii. Opcja ta powoduje, że wyjście jest jednoznaczne, nawet przy nazwach plików zawierających niecodzienne znaki, jak znak nowej linii. Może być wykorzystywana z poleceniami typu: `find -print0', `perl -0', `sort -z' czy `xargs -0', umożliwiając przetwarzanie plików o dowolych nazwach, nawet zawierających znaki nowej linii.
`-z'
`--null-data'
Traktuje wejście jak zbiór linii, z których każda zakończona jest bajtem zerowym (znak ASCII NUL), a nie znakiem nowej linii. Podobnie jak opcja `-Z' czy `--null', może ona być wykorzystywana z poleceniami typu `sort -z' do przetwarzania dowolnych nazw plików.

Kilka dodatkowych opcji odpowiada za dobór wariantu modułu dopasowującego, jaki zostanie użyty podczas działania. Zob. 4. Programy grep.

2.2. Zmienne środowiska

Na zachowanie się grep mają wpływ następujące zmienne środowiska.

GREP_OPTIONS
Ta zmienna określa domyślne opcje, jakie zostaną umieszczone przed wszystkimi opcjami podanymi wprost. Na przykład, jeśli GREP_OPTIONS jest równe `--binary-files=without-match --directories=skip', to grep zachowa się tak, jakby podano `--binary-files=without-match' i `--directories=skip' przed ewentualnymi jawnymi opcjami. Określenia opcji oddziela się białymi znakami. Odwrotny ukośnik cytuje następny znak, zatem można go wykorzystać do podania opcji zawierającej biały znak lub odwrotny ukośnik.
LC_ALL
LC_MESSAGES
LANG
Te zmienne podają ustawienie regionalne (locale) LC_MESSAGES, określające język, jakiego grep ma użyć w komunikatach. Ustawienie locale jest określane przez pierwszą z tych zmiennych, która ma nadaną wartość. Jeśli nie istnieje żadna z nich, to stosowana jest amerykańska odmiana angielskiego. Dzieje się tak również w przypadku, gdy nie zainstalowano katalogu z komunikatami lub jeśli grep nie został skompilowany z obsługą języków narodowych (NLS).
LC_ALL
LC_CTYPE
LANG
Te zmienne podają ustawienie regionalne (locale) LC_CTYPE, określające typ znaków, np. które z nich są białymi znakami. Ustawienie locale jest określane przez pierwszą z tych zmiennych, która ma nadaną wartość. Jeśli nie istnieje żadna z nich, to stosowane jest ustawienie POSIX. Dzieje się tak również w przypadku, gdy nie zainstalowano katalogu z komunikatami lub jeśli grep nie został skompilowany z obsługą języków narodowych (NLS).
POSIXLY_CORRECT
Jeśli jest ustawiona, to grep zachowuje się zgodnie z wymaganiami POSIX.2; w przeciwnym razie zachowuje się bardziej jak inne programy GNU. POSIX.2 żąda, by opcje, które występują po nazwach plików były traktowane jak nazwy plików. Domyślnie zaś, opcje takie są przesuwane na początek listy argumentów i traktowane jak opcje. Ponadto, POSIX.2 wymaga, by nierozpoznane opcje były zgłaszane jako "nielegalne" ("illegal"), ale ponieważ tak naprawdę nie naruszają one prawa, domyślnie zgłaszane są jako "nieprawidłowe" ("invalid"). 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-tym znakiem wartości tej zmiennej środowiska jest `1', to i-ty argument przekazany do grep nie jest uważany za opcję, nawet jeśli na nią wygląda. Powłoka może umieścić tę zmienną w środowisku dla każdego polecenia, jakie uruchamia, podając, które argumenty są wynikiem rozwinięcia nazw plików i stąd nie powinny być traktowane jako opcje. Zachowanie to jest dostępne tylko z biblioteką GNU C i tylko wtedy gdy nie ustawiono POSIXLY_CORRECT.


Przejdź do pierwszej, poprzedniej, następnej, ostatniej sekcji, spisu treści.