grep
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[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
edytujNazwa „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].
$ 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- -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
edytuj$ 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
edytujW 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
edytujPierwszym 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ż
edytujPrzypisy
edytuj- ↑ Brian Kernighan: The Unix Programming Environment. Prentice Hall, 1984, s. 102. ISBN 0-13-937681-X. (ang.).
- ↑ Error
- ↑ a b grep – Commands & Utilities Reference, The Single UNIX Specification, Issue 7 from The Open Group.
- ↑ grep – Global Regular Expression Print. allacronyms.com. [dostęp 2013-09-30]. (pol.).
- ↑ a b UNIX Shells by Example. Upper Saddle River, NJ: Prentice Hall, 2002. ISBN 978-0-13-066538-6.
- ↑ GNU Grep 2.14. gnu.org. [dostęp 2013-09-30]. (pol.).
- ↑ Marek Włodarz, GREP w InDesign CS3–CS5, MAWArt, Warszawa 2011, ISBN 978-83-932542-0-0.
Linki zewnętrzne
edytujgrep(1)
– strona podręcznika systemu Linux- grep( 1 ). man.przez.net. [zarchiwizowane z tego adresu (2011-04-15)]. – strona podręcznika systemu Linux, po polsku