grep

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

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[edytuj | edytuj kod]

Nazwa „grep” jest angielskim akronimem od słów 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][edytuj | edytuj kod]

$ 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[edytuj | edytuj kod]

  • -c – zamiast wyświetlać linie ze znalezionym fragmentem wyświetla liczbę znalezionych linii;
  • -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 ‘plik’;
  • -h – po podaniu kilku plików do przeszukania po znalezieniu danego ciągu znaków przy danej linii nie będzie podany plik, w którym się to znajdowało;
  • -i – ignoruje wielkość liter, tzn. jeżeli podamy do wyszukania słowo ‘ala’, to pokaże nam ‘ALA’, ‘Ala’, ‘AlA’ itd.;
  • -r – gdy plik podany do przeszukania jest katalogiem, to zostaną przeszukane wszystkie pliki w tym katalogu

Przykłady[edytuj | edytuj kod]

$ 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[edytuj | edytuj kod]

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]).

Zobacz też[edytuj | edytuj kod]

Przypisy

  1. Brian Kernighan: The Unix Programming Environment. Prentice Hall, 1984, s. 102. ISBN 0-13-937681-X. (ang.)
  2. http://minnie.tuhs.org/cgi-bin/utree.pl?file=V4/man/man1/grep.1.
  3. 3,0 3,1 grep – Commands & Utilities Reference, The Single UNIX Specification, Issue 7 from The Open Group.
  4. grep – Global Regular Expression Print (pol.). allacronyms.com. [dostęp 2013-09-30].
  5. 5,0 5,1 UNIX Shells by Example. Upper Saddle River, NJ: Prentice Hall, 2002. ISBN 9780130665386.
  6. GNU Grep 2.14 (pol.). gnu.org. [dostęp 2013-09-30].

Linki zewnętrzne[edytuj | edytuj kod]