Polecenie Linux grep jest używane jako metoda filtrowania danych wejściowych. GREP to skrót od Global Regular Expression Printer, dlatego aby móc go efektywnie używać, musisz mieć wiedzę na temat wyrażeń regularnych.
W tym artykule dowiesz się wielu przykładów, które pomogą Ci zrozumieć polecenie grep.
01 z 09Jak wyszukać ciąg w pliku za pomocą GREP

Wyobraź sobie, że masz plik tekstowy o nazwie książki zawierający następujące tytuły książek dla dzieci:
- Robin Hood
- Czerwony Kapturek
- Piotruś Pan
- Złotowłosa i trzy niedźwiadki
- Królewna Śnieżka i siedmiu krasnoludków
- Pinnochio
- Kot w kapeluszu
- Trzy małe świnki
- Gruffalo
- Charlie i fabryka czekolady
Aby znaleźć wszystkie książki ze słowem "The" w tytule, należy użyć następującej składni:
grep KsiążkiZwrócone zostaną następujące wyniki:
- Złotowłosa i trzy niedźwiadki
- Królewna Śnieżka i siedmiu krasnoludków
- Kot w kapeluszu
- Trzy małe świnki
- Gruffalo
- Charlie i fabryka czekolady
W każdym przypadku słowo "The" zostanie podświetlone.
W wyszukiwaniu rozróżniana jest wielkość liter, więc jeśli jeden z tytułów miał "the" zamiast "The", to nie zostałby on zwrócony.
Aby zignorować sprawę, możesz dodać następujący przełącznik:
grep the books --ignore-caseMożesz także użyć przełącznika -i w następujący sposób:
Kontynuuj czytanie poniżej
02 z 09Wyszukaj ciąg w pliku za pomocą symboli wieloznacznych
Polecenie grep jest bardzo potężne. Możesz użyć wielu technik porównywania wzorców do filtrowania wyników.
W tym przykładzie pokażę ci, jak wyszukiwać ciąg znaków w pliku za pomocą symboli wieloznacznych.
Wyobraź sobie, że masz plik o nazwie miejsca z następującymi szkockimi nazwami miejsc:
aberdeenaberystwythaberlourinverurieinvernessNewburghnowy jeleńnowy gallowayglasgowEdynburgJeśli chcesz znaleźć wszystkie miejsca z inwerterem w nazwie, użyj następującej składni:
grep inver * miejscaGwiazdka z symbolem gwiazdki (*) oznacza 0 lub wiele. Dlatego jeśli masz miejsce zwane inwertorem lub miejsce zwane Inverness, oba zostaną zwrócone.
Kolejną maską, której możesz użyć, jest kropka (.). Możesz użyć tego do dopasowania pojedynczej litery.
grep inver.r placesPowyższa komenda znajdowałaby miejsca zwane inverurie i inverary, ale nie znajdowały by się zbytnio, ponieważ może istnieć tylko jedna wieloznaczna między dwoma r, jak oznaczono przez pojedynczy okres.
Okresowy symbol wieloznaczny jest przydatny, ale może powodować problemy, jeśli jest on częścią tekstu, którego szukasz.
Na przykład spójrz na tę listę nazw domen
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everyonelinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
Aby znaleźć wszystkie informacje o plikach .com, które można po prostu przeszukiwać, użyj następującej składni:
grep * about * domainnamesPowyższa komenda padłaby, gdyby lista zawierała w sobie następującą nazwę:
- everyonelinuxuser.com/about.html
Można zatem wypróbować następującą składnię:
grep * about.com nazwy domenTo działałoby dobrze, chyba że istnieje domena o następującej nazwie:
aboutycom.comAby naprawdę wyszukać termin o.com, musisz uciec z kropki w następujący sposób:
grep * o domenie .comOstatnim symbolem wieloznacznym, który można pokazać, jest znak zapytania, który oznacza zero lub jeden znak.
Na przykład:
grep? ber placenamesPowyższe polecenie zwróci aberdeen, aberystwyth lub nawet berwick.
Kontynuuj czytanie poniżej
03 z 09Szukaj ciągów na początku i na końcu wiersza za pomocą grep
Symbol karat (^) i dolar ($) umożliwiają wyszukiwanie wzorców na początku i końcu linii.
Wyobraź sobie, że masz plik o nazwie piłka nożna o następujących nazwach drużyn:
- Blackpool
- Liverpool
- Manchester
- Leicester City
- Manchester United
- Newcastle United
- FC United Of Manchester
Jeśli chcesz znaleźć wszystkie zespoły, które rozpoczęły się w Manchesterze, użyjesz następującej składni:
grep ^ Manchester drużynyPowyższe polecenie zwróci Manchester City i Manchester United, ale nie FC United Of Manchester.
Alternatywnie możesz znaleźć wszystkie zespoły kończące się na United, używając następującej składni:
grep drużyny United $Powyższe polecenie powróciłoby do Manchesteru United i Newcastle United, ale nie do FC United Of Manchester.
04 z 09Zliczanie liczby meczów za pomocą grep
Jeśli nie chcesz zwracać rzeczywistych linii pasujących do wzorca przy użyciu polecenia grep, ale chcesz się tylko dowiedzieć, ile można użyć następującej składni:
grep -c plik wejściowy wzorcaJeśli wzorzec został dopasowany dwukrotnie, zwracana byłaby liczba 2.
Kontynuuj czytanie poniżej
05 z 09Znajdowanie wszystkich terminów, które nie pasują do grep
Wyobraź sobie, że masz listę nazw miejscowości z następującymi krajami:
- aberdeen Szkocja
- glasgow Szkocja
- liverpool w Anglii
- Colwyn Bay
- Londyn, Anglia
Być może zauważyłeś, że Colwyn Bay nie ma powiązanego kraju.
Aby wyszukać wszystkie miejsca w danym kraju, możesz użyć następującej składni:
grep land $ miejscaZwrócone wyniki będą wszystkimi miejscami z wyjątkiem colwyn bay.
To oczywiście działa tylko w miejscach, które kończą się lądem (mało naukowym).
Możesz odwrócić wybór, używając następującej składni:
grep -v land $ miejscaZnajdowałoby to wszystkie miejsca, które nie kończyły się lądem.
06 z 09Jak znaleźć puste linie w plikach za pomocą grep
Wyobraź sobie, że masz plik wejściowy, który jest używany przez aplikację innej firmy, która przestaje czytać plik, gdy znajdzie pusty wiersz w następujący sposób:
- aberdeen scotland
- inverness scotland
- liverpool w Anglii
- Colwyn Bay Wales
Kiedy aplikacja dostaje się do linii po liverpool, przestanie czytać, co oznacza, że colwyn bay zupełnie nie trafia.
Możesz użyć polecenia grep, aby wyszukać puste wiersze z następującą składnią:
grep ^ $ placesNiestety nie jest to szczególnie przydatne, ponieważ po prostu zwraca puste linie.
Można oczywiście uzyskać liczbę pustych wierszy jako sprawdzenie, aby sprawdzić, czy plik jest ważny w następujący sposób:
grep -c ^ $ miejscByłoby jednak bardziej przydatne, aby znać numery linii, które mają pustą linię, aby można było je zastąpić. Możesz to zrobić za pomocą następującego polecenia:
grep -n ^ $ miejscKontynuuj czytanie poniżej
07 z 09Jak szukać ciągów wielkich lub małych znaków za pomocą grep
Za pomocą polecenia grep możesz określić, które wiersze w pliku mają wielkie litery, używając następującej składni:
grep "A-Z" nazwa plikuNawiasy kwadratowe pozwalają określić zakres znaków. W powyższym przykładzie pasuje do dowolnego znaku między A i Z.
Dlatego aby dopasować małe litery, możesz użyć następującej składni:
grep "a-z" nazwa plikuJeśli chcesz dopasować tylko litery, a nie cyfry lub inne symbole, możesz użyć następującej składni:
grep 'a-zA-Z' filenameMożesz zrobić to samo z liczbami w następujący sposób:
grep "0-9" nazwa pliku 08 09Poszukiwanie powtarzających się wzorców za pomocą grep
Możesz użyć nawiasów klamrowych {}, aby wyszukać powtarzający się wzór.
Wyobraź sobie, że masz plik z numerami telefonów w następujący sposób:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Wiesz, że pierwsza część numeru musi składać się z trzech cyfr i chcesz znaleźć linie, które nie pasują do tego wzorca.
Z poprzedniego przykładu wiesz, że 0-9 zwraca wszystkie liczby w pliku.
W tym przypadku chcemy, aby wiersze zaczynały się od trzech liczb zakończonych łącznikiem (-). Możesz to zrobić za pomocą następującej składni:
grep "^ 0-9 0-9 0-9 -" liczbyJak wiemy z poprzednich przykładów, karat (^) oznacza, że linia musi zaczynać się od następującego wzoru.
0-9 wyszuka dowolną liczbę z zakresu od 0 do 9. Jako że jest ona zawarta trzy razy, dopasowuje 3 liczby. Na końcu jest łącznik oznaczający, że łącznik musi zastąpić trzy liczby.
Za pomocą nawiasów klamrowych możesz zmniejszyć wyszukiwanie w następujący sposób:
grep "^ 0-9 {3 } -" liczbyUkośnik wymyka się {nawiasu klamrowego, tak aby działał jako część wyrażenia regularnego, ale w gruncie rzeczy chodzi o to, że 0-9 {3} oznacza dowolną liczbę od 0 do 9 trzy razy.
Kręcone nawiasy mogą być również używane w następujący sposób:
{5,10}{5,}{5, 10} oznacza, że poszukiwana postać musi zostać powtórzona co najmniej 5 razy, ale nie więcej niż 10, podczas gdy {5,} oznacza, że postać musi zostać powtórzona co najmniej 5 razy, ale może to być więcej.
Kontynuuj czytanie poniżej
09 09Używanie wyjścia z innych poleceń Używanie polecenia grep
Do tej pory przyjrzeliśmy się dopasowywaniu wzorców w poszczególnych plikach, ale grep może używać danych wyjściowych z innych poleceń jako danych wejściowych do dopasowywania wzorców.
Doskonałym tego przykładem jest użycie polecenia ps, które zawiera listę aktywnych procesów.
Na przykład uruchom następujące polecenie:
ps -efZostaną wyświetlone wszystkie uruchomione procesy w twoim systemie.
Możesz użyć polecenia grep do wyszukania określonego działającego procesu w następujący sposób:
ps -ef | grep firefoxstreszczenie
Polecenie grep jest podstawowym poleceniem dla systemu Linux i warto je poznać, ponieważ znacznie ułatwi to wyszukiwanie plików i procesów podczas korzystania z terminala.




