grep

grepprogram (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[1], 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[2].

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 POSIX[3].

Nazwa

Nazwa „grep” jest akronimem od ang. global regular expression print[4].

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[5].

Użycie[6]

$ 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 ang. extended grep) można używać rozszerzonej, w stosunku do „klasycznego” grepa, składni wyrażeń regularnych, a w poleceniu fgrep (od ang. fast grep lub fixed grep) znaki specjalne używane w wyrażeniach regularnych używane są literalnie, np. znaki $ i ^, nie mają specjalnego, symbolicznego znaczenia, lecz odpowiadają same sobie[5]. 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[3]).

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 Perl[7].

Zobacz też

Przypisy

  1. Brian Kernighan: The Unix Programming Environment. Prentice Hall, 1984, s. 102. ISBN 0-13-937681-X. (ang.).
  2. Error
  3. a b grep – Commands & Utilities Reference, The Single UNIX Specification, Issue 7 from The Open Group.
  4. grep – Global Regular Expression Print. allacronyms.com. [dostęp 2013-09-30]. (pol.).
  5. a b UNIX Shells by Example. Upper Saddle River, NJ: Prentice Hall, 2002. ISBN 978-0-13-066538-6.Sprawdź autora:1.
  6. GNU Grep 2.14. gnu.org. [dostęp 2013-09-30]. (pol.).
  7. Marek Włodarz, GREP w InDesign CS3–CS5, MAWArt, Warszawa 2011, ISBN 978-83-932542-0-0.

Linki zewnętrzne