grep(1) grep(1)
OPIS
grep, egrep, fgrep - wypisz linie pasujące do wzorca
SKŁADNIA
grep [-[AB] NUM] [-CEFGVbchiLlnqsvwxyUu] [-e WZÓR | -f
PLIK] [--extended-regexp] [--fixed-strings] [--basic-reg
exp] [--regexp=WZÓR] [--file=PLIK] [--ignore-case]
[--word-regexp] [--line-regexp] [--line-regexp] [--no-mes
sages] [--revert-match] [--version] [--help] [--byte-off
set] [--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]
pliki...
OPIS
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, grep wypisuje linie pasujące.
Istnieją trzy główne warianty grepa, kontrolowane przez
następujące opcje:
-G, --basic-regexp
Interpretuj wzór jako podstawowe wyrażenie regu
larne (zobacz niżej). Jest to zachowanie domyślne.
-E, --extended-regexp
Interpretuj wzór jako rozszerzone wyrażenie regu
larne (patrz niżej).
-F, --fixed-strings
Interpretuj 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.
Dodatkowo dostępne są dwa programy wariantowe egrep i
fgrep. egrep jest podobny (ale nie identyczny) do
grep -E, i jest kompatybilny z historycznym egrep
Unixowym. Fgrep jest tym samym co grep -F.
Wszystkie warianty grepa rozumieją następujące opcje:
-NUM Pasujące linie zostaną wypisane z NUM linii
poprzedzającego i następującego kontekstu. grep
jednak nie wypisze żadnej linii więcej niż jeden
raz.
-A NUM, --after-context=NUM
Wypisz NUM linii następującego kontekstu po
pasujących liniach.
-B NUM, --before-context=NUM
Wypisz NUM linii poprzedzającego kontekstu przed
pasującymi liniami.
-C, --context
Równoważne -2.
-V, --version
Wypisz numer wersji grepa na standardowy błąd. Ów
numer wersji powinien zostać załączony do
GNU Project 26 wrzesień 1998 1
grep(1) grep(1)
wszystkich raportów o błędach (patrz niżej).
-b, --byte-offset
Wypisz offset bajtowy w pliku wejściowym przed
każdą linią wyjścia.
-c, --count
Wyłącz normalne wyjście; zamiast niego wypisuj
liczbę pasujących linii dla każdego pliku
wejściowego. Z opcją -v, --revert-match (patrz
niżej), policz linie niepasujące.
-e WZÓR, --regexp=WZÓR
Użyj WZÓR jako wzoru; użyteczne do ochronienia
wzorów zaczynających się od -.
-f PLIK, --file=PLIK
Pobierz wzory z PLIK, po jednym z każdej linii.
Plik pusty zawiera zero wzorów, nie pasując do
niczego.
-h, --no-filename
Wyłącz prefiksowanie nazw plików w wyjściu podczas
przeszukiwania wielu plików.
-i, --ignore-case
Ignoruj rożróżnienia w wielkości liter we wzór oraz
w plikach wejściowych.
-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.
-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.
-n, --line-number
Poprzedź każda linię wyjścia numerem linii w
odpowiednim pliku wejściowym.
-q, --quiet
Po cichu; wyłącz normalne wyjście. Przeszukiwanie
zakończy się na pierwszej pasującej linii.
-s, --silent
Wyłącz komunikaty błędów o plikach nieistniejących
lub nie do odczytania.
-v, --revert-match
Odwróc sens dopasowania, wybieraj linie niepa
sujące.
-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.
GNU Project 26 wrzesień 1998 2
grep(1) grep(1)
-x, --line-regexp
Wybierz tylko te dopasowania które dokładnie pasują
do całej linii.
-y Przestarzały synonim -i.
-U, --binary
Potraktuj plik jako binarny. Domyślnie, w DOSie i
MS Windows, grep zgaduje typ pliku spoglądając na
zawartość pierwszych 32 kB przeczytanych z pliku.
Jeśli grep zdecyduje że plik jest tekstem, udziera
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 mechaniz
mowi 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.
-u, --unix-byte-offsets
Raportuj offsety bajtowe w stylu Unixowym.
Przełącznik ten powoduje żę grep raportuje offsety
bajtowe tak jakby plik był plikiem tekstowym w
stylu Unixowym, tj. z udartymi znakami CR. Da to
rezultaty identyczne z uruchamianiem grepa na
maszynie Unixowej. Opcja ta nie wywołuje żadnego
efektu, chyba że użyto także opcji -b; dostępna
jest ona tylko w DOSie i MS Windows.
WYRAŻENIA REGULARNE
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ń.
grep rozumie dwie różne wersje składni wyrażeń regu
larnych: "podstawową" i "złożoną". W 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 sto
sunku do wyrażeń bazowych podsumowano na końcu.
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.
Lista znaków zwarta między [ a ] pasuje do każdego poje
dynczego znaku na tej liście; jeśli pierwszym znakiem
listy jest daszek ^, pasuje wtedy ona do każdego znaku nie
znajdującego się na liście. Dla przykładu, wyrażenie reg
ularne [0123456789] pasuje do każdej pojedynczej cyfry.
Zakres znaków ASCII podać można określając znak pierwszy i
GNU Project 26 wrzesień 1998 3
grep(1) grep(1)
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: [:alnum:], [:alpha:], [:cntrl:],
[:digit:], [:graph:], [:lower:], [:print:], [:punct:],
[:space:], [:upper:], oraz [:xdigit:]. Na przykład
[[:alnum:]] oznacza [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 ], umieść go
jako pierwszy na liście. Podobnie, aby umieścić dosłowny
^, umieść go gdziekolwiek poza pierwszym miejscem. W
końcu, aby umieścić dosłowny -, umieść go na ostatku.
Kropka . pasuje do każdego pojedynczego znaku. Symbol \w
to synonim [[:alnum:]] a \W to synonim [^[:alnum]].
Daszek ^ oraz znak dolara $ są metaznakami które pasują
odpowiednio do łańcucha pustego na początku i na końcu
linii. Symbole \< oraz \> pasują odpowiednio do łańcucha
pustego na początku i na końcu słowa. Symbol \b pasuje do
łańcucha pustego na krawędzi słowa, zaś \B pasuje do
pustego łańcucha zakładając że nie jest on na krawędzi
słowa.
Po wyrażeniu regularnym może następować jeden z kilku
operatorów powtórzenia:
? Poprzedzający element jest opcjonalny i pasuje co
najmniej raz.
* Poprzedzający element będzie dopasowany zero lub
więcej razy.
+ Poprzedzający element będzie dopasowany jeden lub
więcej razy.
{n} Poprzedzający element pasuje dokładnie n razy.
{n,} Poprzedzający element pasuje n lub więcej razy
{,m} Poprzedzający element jest opcjonalny i pasuje co
najwyżej m razy.
{n,m} Poprzedzający element pasuje co najmniej n razy,
ale nie więcej niż m razy.
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ń.
Dwa wyrażenia regularne można połączyć operatorem infik
sowym |; wynikowe wyrażenie regularne pasuje do dowolnego
ciągu pasującego do jednego z podwyrażeń.
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ł
GNU Project 26 wrzesień 1998 4
grep(1) grep(1)
priorytetowych.
Wsteczne odniesienie \n, gdzie n jest pojedynczą cyfrą,
pasuje do podciągu poprzednio pasującego do n-tego ujętego
w nawiasy podwyrażenia wyrażenia regularnego.
W podstawowych wyrażeniach regularnych metaznaki ?, +, {,
|, (, oraz ) tracą swoje szczególne znaczenie; zamiast
nich użyj wersji z backslashem: \?, \+, \{, \|, \(, oraz
\).
W egrepie metaznak { traci swoje szczególne znaczenie;
użyj zamiast niego \{.
DIAGNOSTYKA
Normalnie status wyjściowy równa się 0 jeśli znaleziono
dopasowania, i 1 jeśli nie znaleziono żadnych. Opcja -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.
BŁĘDY
Emailuj raporty o błędach do bug-gnu-utils@gnu.org.
Upewnij się że umieściłeś słowo "grep" gdzieś w polu "Sub
ject:"
Duże liczniki powtórzeń w konstrukcji {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
grepowi zabraknie pamięci.
Wsteczne odwołania są bardzo powolne, i mogą wymagać czasu
rosnącego wykładnikowo.
GNU Project 26 wrzesień 1998 5