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;
  • -vnegacja 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. minnie.tuhs.org.
  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.
  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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Kembali kehalaman sebelumnya