.\" Tłumaczenie: Gwidon S. Naskrent (naskrent@hoth.amu.edu.pl), IX 1998
.\" {PTM/GSN/0.5/23-02-1999/"wypisz linie pasujące do wzorca"}
.TH grep 1 "26 wrzesień 1998" "GNU Project"
.SH OPIS
grep, egrep, fgrep \- wypisz linie pasujące do wzorca
.SH SKŁADNIA
.B grep
[-[AB] NUM] [-CEFGVbchiLlnqsvwxyUu] [-e WZÓR | -f PLIK]
[--extended-regexp] [--fixed-strings] [--basic-regexp]
[--regexp=WZÓR] [--file=PLIK] [--ignore-case] [--word-regexp]
[--line-regexp] [--line-regexp] [--no-messages] [--revert-match]
[--version] [--help] [--byte-offset] [--line-number]
[--with-filename] [--no-filename] [--quiet] [--silent]
[--files-without-match] [--files-with-matcces] [--count]
[--before-context=NUM] [--after-context=NUM] [--context]
[--binary] [--unix-byte-offsets]
.I pliki...
.SH OPIS
.PP
.B grep
przeszukuje nazwane pliki wejściowe (lub standardowe wejście jeśli
nie podano żadnych, lub podano nazwę pliku '\-'), szukając linii
zawierających coś pasującego do podanego wzoru.  Domyślnie,
.B grep
wypisuje linie pasujące.
.PP
Istnieją trzy główne warianty
.BR grepa ,
kontrolowane przez następujące opcje:
.PD 0
.TP
.B \-G, --basic-regexp
Interpretuj
.I wzór
jako podstawowe wyrażenie regularne (zobacz niżej).  Jest to zachowanie
domyślne.
.TP
.B \-E, --extended-regexp
Interpretuj
.I wzór
jako rozszerzone wyrażenie regularne (patrz niżej).
.TP
.B \-F, --fixed-strings
Interpretuj
.I wzór
jako listę łańcuchów o stałej długości, oddzielonych znakami nowej
linii, które należy dopasować każdy z osobna.
.LP
Dodatkowo dostępne są dwa programy wariantowe
.B egrep
i
.BR fgrep .
.B egrep
jest podobny (ale nie identyczny) do
.BR "grep\ \-E" ,
i jest kompatybilny z historycznym
.B egrep 
Unixowym.
.B Fgrep
jest tym samym co
.BR "grep\ \-F" .
.PD
.LP
Wszystkie warianty
.B grepa
rozumieją następujące opcje:
.PD 0
.TP
.BI \- NUM
Pasujące linie zostaną wypisane z 
.I NUM
linii poprzedzającego i następującego kontekstu.
.B grep
jednak nie wypisze żadnej linii więcej niż jeden raz.
.TP
.BI \-A " NUM" ", --after-context=" NUM
Wypisz
.I NUM
linii następującego kontekstu po pasujących liniach.
.TP
.BI \-B " NUM" ", --before-context=" NUM
Wypisz
.I NUM
linii poprzedzającego kontekstu przed pasującymi liniami.
.TP
.B \-C, --context
Równoważne
.BR \-2 .
.TP
.B \-V, --version
Wypisz numer wersji
.B grepa
na standardowy błąd.  Ów numer wersji powinien zostać załączony do
wszystkich raportów o błędach (patrz niżej).
.TP
.B \-b, --byte-offset
Wypisz offset bajtowy w pliku wejściowym przed każdą linią wyjścia.
.TP
.B \-c, --count
Wyłącz normalne wyjście; zamiast niego wypisuj liczbę pasujących linii
dla każdego pliku wejściowego.
Z opcją
.B \-v, --revert-match
(patrz niżej), policz linie niepasujące.
.TP
.BI \-e " WZÓR" ", --regexp=" WZÓR
Użyj
.I WZÓR
jako wzoru; użyteczne do ochronienia wzorów zaczynających się od
.BR \- .
.TP
.BI \-f " PLIK" ", --file=" PLIK
Pobierz wzory z
.IR PLIK ,
po jednym z każdej linii.  Plik pusty zawiera zero wzorów, nie pasując
do niczego.
.TP
.B \-h, --no-filename
Wyłącz prefiksowanie nazw plików w wyjściu podczas przeszukiwania wielu
plików.
.TP
.B \-i, --ignore-case
Ignoruj rożróżnienia w wielkości liter we
.I wzór
oraz w plikach wejściowych.
.TP
.B \-L, --files-without-match
Wyłącz normalne wyjście; zamiast niego wypisz nazwę każdego pliku
z którego normalnie nie wypisano by żadnego wyjścia.  Przeszukiwanie
zakończy się na pierwszej pasującej linii.
.TP
.B \-l, --files-with-matches
Wyłącz normalne wyjście; zamiast niego wypisz nazwę każdego pliku
z którego normalnie wypisano by jakieś wyjście.  Przeszukiwanie
zakończy się na pierwszej pasującej linii.
.TP
.B \-n, --line-number
Poprzedź każda linię wyjścia numerem linii w odpowiednim pliku
wejściowym.
.TP
.B \-q, --quiet
Po cichu; wyłącz normalne wyjście.  Przeszukiwanie zakończy się na
pierwszej pasującej linii.
.TP
.B \-s, --silent
Wyłącz komunikaty błędów o plikach nieistniejących lub nie do odczytania.
.TP
.B \-v, --revert-match
Odwróc sens dopasowania, wybieraj linie niepasujące.
.TP
.B \-w, --word-regexp
Wybieraj tylko te linie które zawierają wzory tworzące całe słowa.
Test przeprowadzany polega na tym że dopasowywany podciąg musi albo 
znajdować się na początku linii, albo być poprzedzony znakiem nie
tworzącym słowa.  Podobnie, musi albo znajdować się na końcu linii,
albo musi następować po nim znak nie tworzący słowa.  Znakami
tworzącymi słowa są litery, cyfry i znak podkreślenia.
.TP
.B \-x, --line-regexp
Wybierz tylko te dopasowania które dokładnie pasują do całej linii.
.TP
.B \-y
Przestarzały synonim
.BR \-i .
.TP
.B \-U, --binary
Potraktuj plik jako binarny.  Domyślnie, w DOSie i MS Windows,
.BR grep
zgaduje typ pliku spoglądając na zawartość pierwszych 32 kB przeczytanych
z pliku.  Jeśli
.BR grep
zdecyduje że plik jest tekstem, udziera znaki CR z oryginalnej zawartości
pliku (po to żeby wyrażenia regularne z
.B ^
i
.B $
działały poprawnie).  Podanie
.B \-U
wyłącza to zgadywanie, powodując że wszystkie pliki są czytane i
przekazywane mechanizmowi dopasowywującemu jak leci; 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 jest dostępna
tylko w DOSie i MS Windows.
.TP
.B \-u, --unix-byte-offsets
Raportuj offsety bajtowe w stylu Unixowym.  Przełącznik ten powoduje żę
.B grep
raportuje offsety bajtowe tak jakby plik był plikiem tekstowym w stylu
Unixowym, tj. z udartymi znakami CR.  Da to rezultaty identyczne z
uruchamianiem 
.B grepa
na maszynie Unixowej.  Opcja ta nie wywołuje żadnego efektu, chyba że użyto
także opcji
.BR \-b ;
dostępna jest ona tylko w DOSie i MS Windows.
.PD
.SH "WYRAŻENIA REGULARNE"
.PP
Wyrażenie regularne to wzór opisujący zbiór łańcuchów.  Wyrażenia
regularne są zbudowane analogicznie do wyrażeń arytmetycznych,
używając różnych operatorów do połączenia mniejszych wyrażeń.
.PP
.B grep
rozumie dwie różne wersje składni wyrażeń regularnych: "podstawową"
i "złożoną".  W
.RB "GNU\ " grep ,
nie ma różnicy w dostępnej funkcjonalności kiedy używa się jednej
ze składni.  W innych implementacjach podstawowe wyrażenia regularne
są mniej wszechstronne.  Poniższy opis stosuje się do rozszerzonych
wyrażeń regularnych; różnice w stosunku do wyrażeń bazowych podsumowano
na końcu.
.PP
Fundamentalne "cegiełki" to wyrażenia regularne pasujące do pojedynczego
znaku.  Większość znaków, w tym wszystkie litery i cyfry, to wyrażenia
regularne pasujące do samych siebie.  Każdy metaznak mający specjalne
znaczenie może być cytowany przez poprzedzenie go backslashem.
.PP
Lista znaków zwarta między
.B [
a
.B ]
pasuje do każdego pojedynczego znaku na tej liście; jeśli pierwszym znakiem
listy jest daszek
.BR ^ ,
pasuje wtedy ona do każdego znaku
.I nie
znajdującego się na liście.  Dla przykładu, wyrażenie regularne
.B [0123456789]
pasuje do każdej pojedynczej cyfry.  Zakres znaków ASCII podać można
określając znak pierwszy i ostatni, oddzielone myślnikiem.
Niektóre w końcu nazwane klasy znaków są predefiniowane.  Ich nazwy
mówią same za siebie, i są to:
.BR [:alnum:] ,
.BR [:alpha:] ,
.BR [:cntrl:] ,
.BR [:digit:] ,
.BR [:graph:] ,
.BR [:lower:] ,
.BR [:print:] ,
.BR [:punct:] ,
.BR [:space:] ,
.BR [:upper:] ,
oraz
.BR [:xdigit:].
Na przykład
.B [[:alnum:]]
oznacza
.BR [0-9A-Za-z] ,
z tym wyjątkiem że ta druga forma zależy od kodowania znaków ASCII, podczas
gdy format jest przenośny (zauważ że nawiasy w tych nazwach klas są
częścią nazw symbolicznych, i muszą być załączone, razem z nawiasami
ograniczającymi listę w nawiasach).  Większość metaznaków traci swoje
szczególne znaczenie wewnątrz list.  Aby umieścić tam dosłowny
.BR ] ,
umieść go jako pierwszy na liście.  Podobnie, aby umieścić dosłowny
.BR ^ ,
umieść go gdziekolwiek poza pierwszym miejscem.  W końcu, aby umieścić
dosłowny
.BR \- ,
umieść go na ostatku.
.PP
Kropka
.B .
pasuje do każdego pojedynczego znaku.
Symbol
.B \ew
to synonim
.B [[:alnum:]]
a
.B \eW
to synonim
.BR [^[:alnum]] .
.PP
Daszek
.B ^
oraz znak dolara
.B $
są metaznakami które pasują odpowiednio do łańcucha pustego na początku
i na końcu linii.  Symbole
.B \e<
oraz
.B \e>
pasują odpowiednio do łańcucha pustego na początku i na końcu słowa.
Symbol
.B \eb
pasuje do łańcucha pustego na krawędzi słowa, zaś
.B \eB
pasuje do pustego łańcucha zakładając że 
.I nie
jest on na krawędzi słowa.
.PP
Po wyrażeniu regularnym może następować jeden z kilku operatorów
powtórzenia:
.PD 0
.TP
.B ?
Poprzedzający element jest opcjonalny i pasuje co najmniej raz.
.TP
.B *
Poprzedzający element będzie dopasowany zero lub więcej razy.
.TP
.B +
Poprzedzający element będzie dopasowany jeden lub więcej razy.
.TP
.BI { n }
Poprzedzający element pasuje dokładnie 
.I n
razy.
.TP
.BI { n ,}
Poprzedzający element pasuje
.I n
lub więcej razy
.TP
.BI {, m }
Poprzedzający element jest opcjonalny i pasuje co najwyżej
.I m
razy.
.TP
.BI { n , m }
Poprzedzający element pasuje co najmniej
.I n
razy, ale nie więcej niż
.I m
razy.
.PD
.PP
Dwa wyrażenia regularne można do siebie dodać; wynikowe wyrażenie
regularne pasuje do każdego ciągu utworzonego poprzez dodanie
dowolnych dwóch ciągów które odpowiednio pasują do dodanych
podwyrażeń.
.PP
Dwa wyrażenia regularne można połączyć operatorem infiksowym
.BR | ;
wynikowe wyrażenie regularne pasuje do dowolnego ciągu pasującego
do jednego z podwyrażeń.
.PP
Powtarzanie bierze priorytet nad dodawaniem, które z kolei bierze
górę nad przemiennością.  Całe wyrażenie regularne można ująć
w nawiasy, celem unieważnienia tych reguł priorytetowych.
.PP
Wsteczne odniesienie
.BI \e n\c
\&, gdzie
.I n
jest pojedynczą cyfrą, pasuje do podciągu poprzednio pasującego do
.IR n \-tego
ujętego w nawiasy podwyrażenia wyrażenia regularnego.
.PP
W podstawowych wyrażeniach regularnych metaznaki
.BR ? ,
.BR + ,
.BR { ,
.BR | ,
.BR ( ,
oraz
.BR )
tracą swoje szczególne znaczenie; zamiast nich użyj wersji z backslashem:
.BR \e? ,
.BR \e+ ,
.BR \e{ ,
.BR \e| ,
.BR \e( ,
oraz
.BR \e) .
.PP
W
.B egrepie
metaznak
.B {
traci swoje szczególne znaczenie; użyj zamiast niego
.BR \e{ .
.SH DIAGNOSTYKA
.PP
Normalnie status wyjściowy równa się 0 jeśli znaleziono dopasowania,
i 1 jeśli nie znaleziono żadnych.  Opcja
.B \-v
odwraca sens statusu wyjściowego.  Status wyjściowy równa się 2 jeśli
wystąpiły błędy składniowe we wzorze, niedostępne pliki wejściowe lub
inne błędy systemowe.
.SH BŁĘDY
.PP
Emailuj raporty o błędach do
.BR bug-gnu-utils@gnu.org .
Upewnij się że umieściłeś słowo "grep" gdzieś w polu "Subject:"
.PP
Duże liczniki powtórzeń w konstrukcji
.BI { m , n }
mogą spowodować że grep zużyje mnóstwo pamięci.  Dodatkowo, pewne
inne niejasne wyrażenia regularne wymagają czasu i przestrzeni
rosnącej wykładnikowo, i mogą spowodować że
.B grepowi
zabraknie pamięci.
.PP
Wsteczne odwołania są bardzo powolne, i mogą wymagać czasu rosnącego
wykładnikowo.
