grep – program (komenda wiersza poleceń), który służy do wyszukiwania w tekście i wyodrębniania linii zawierających ciąg znaków pasujący do podanego wyrażenia regularnego.

Pierwotnie grep był jednym z podstawowych programów wchodzących w skład systemu Unix, lecz współcześnie jest obecny praktycznie w każdym systemie uniksopodobnym. Został napisany przez Kena Thompsona, który wyodrębnił go jako samodzielny program z kodu źródłowego edytora o nazwie ed (również przez niego stworzonego). grep po raz pierwszy pojawił się w Unix Wersja 4 w roku 1973.

Wersja o nazwie GNU grep została stworzona przez Free Software Foundation i charakteryzuje się m.in. zastosowaniem rozszerzonych wyrażeń regularnych oraz zgodnością z POSIXgrep – Commands & Utilities Reference, The Single UNIX Specification, Issue 7 from The Open Group..

Nazwa Nazwa „grep” jest akronimem od .

Geneza nazwy grep może pochodzić z czasów stosowania edytora ex. Komendą do wyszukiwania w całym edytowanym tekście ciągu znaków pasującego do wyrażenia regularnego jest :g/wyrażenie regularne/p ponieważ po angielsku wyrażenie regularne to (w skrócie) re (od regular expression) to otrzymujemy g/re/p.

Użycie $ grep opcje wzorzec plik/pliki opcje – opcje programu grep kontrolujące wejście, wyjście oraz sposób poszukiwania wzorca wzorzec – łańcuch znaków do wyszukiwania, może zawierać wyrażenie regularne plik/pliki – plik lub lista plików wejściowych z tekstem do przeszukania

Opcje -c – wyświetla liczbę znalezionych linii zamiast linii ze znalezionym fragmentem; -L – nie wyświetla znalezionego fragmentu, tylko pokazuje nazwy plików, w których nie było tego ciągu znaków; -l – odwrotnie do poprzedniego polecenia, wyświetla pliki w których znalazło dany ciąg znaków; -n – wyświetlany jest numer linii w pliku, w których znaleziono dany ciąg znaków; -w – wyszukuje tylko całe słowa; -x – wyszukuje tylko całe linie; -v – negacja zapytania -f plik – dane do wyszukania są brane po jednym wierszu z pliku; -h – przy podaniu kilku plików do przeszukania, po znalezieniu danego ciągu znaków przy danej linii nie będzie podany plik, w którym znajdował się dany ciąg; -i – ignoruje wielkość liter, np. przy szukaniu słowa ‘ala’ zwrócone zostaną ‘ALA’, ‘Ala’, ‘AlA’ itd.; -r – gdy plik podany do przeszukania jest katalogiem, przeszukane zostaną wszystkie pliki w tym katalogu

Przykłady

$ grep 'Ala' plik Znajduje linie zawierające wyraz ‘Ala’ w pliku ‘plik’. $ grep 'A[lg]a' plik Znajduje linie zawierające wyraz ‘Ala’ lub ‘Aga’. $ grep 'A.a' plik Znajduje linie zawierające wyrazy takie jak ‘Ala’, ‘Asa’, ‘Aaa’ itp. $ grep '^Ala' plik Znajduje linie zawierające wyraz ‘Ala’ na początku. $ grep 'Go+gle' plik Znajduje linie zawierające wyraz ‘Gogle’, ‘Google’, ‘Gooooooogle’ itp. $ grep '[0-9]+' Znajduje linie zawierające dowolną liczbę. $ kill 'pgrep firefox' Wyłącza przeładowany firefox $ grep -i -R -n -H 'the' * Szuka słowa ‘the’ w dowolnym dokumencie bez względu na wielkość liter wraz z podaniem nazwy pliku i linii gdzie znajduje się szukane słowo. $ grep -i -R -n -H 'the' * >print.txt Szuka słowa ‘the’ i przekierowuje wyjście do pliku tekstowego ‘print.txt’.

Warianty W niektórych systemach uniksowych istnieją także pochodne modyfikacje komendy grep o nazwach: egrep, fgrep, agrep czy rgrep. W poleceniu egrep (od ) można używać rozszerzonej, w stosunku do „klasycznego” grepa, składni wyrażeń regularnych, a w poleceniu fgrep (od lub ) znaki specjalne używane w wyrażeniach regularnych używane są literalnie, np. znaki $ i ^, nie mają specjalnego, symbolicznego znaczenia, lecz odpowiadają same sobie. Kod źródłowy polecenia fgrep wykorzystuje algorytm Aho-Corasick.

Współczesne implementacje programu grep np. GNU grep, funkcje osobnych wariantów, mają dostępne w postaci opcji podawanych przy wywołaniu programu (np. -E dla egrep i -F dla fgrep, co jest zapisane w normie POSIX).

Implementacje Pierwszym programem do składu i łamania publikacji (DTP), w którym zastosowano zaawansowane wyszukiwanie tekstu oparte na grepie, jest Adobe InDesign w wersji CS3 z 2007 r. Znajduje się ono w oknie Znajdź/Zamień, w którym obok zakładki Text umieszczono zakładkę Grep. Silnik grepa w tym programie jest oparty na bibliotekach BOOST używanych w implementacjach języka PerlMarek Włodarz, GREP w InDesign CS3–CS5, MAWArt, Warszawa 2011, ..

Zobacz też wieloznacznik wyrażenie regularne Pomoc:Wyrażenia regularne

Przypisy

Linki zewnętrzne

– strona podręcznika systemu Linux, po polsku

Kategoria:Polecenia Unix