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

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]

edytuj

$ 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;
  • -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

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

edytuj

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

edytuj

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ż

edytuj

Przypisy

edytuj
  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

edytuj

📚 Artikel Terkait di Wikipedia

S-wyrażenie

S-wyrażenie (ang. S-expression skrót od symbolic expression) – to notacja, służąca do zapisu struktury list oraz drzew pod postacią tekstu. Wykorzystywana

Amfetamina

inni, Methylphenidate-induced dendritic spine formation and DeltaFosB expression in nucleus accumbens, „Proceedings of the National Academy of Sciences

Związki endokrynnie czynne

TolgaT. Ünüvar TolgaT., AtillaA. Büyükgebiz AtillaA., Developmental programming: impact of excess prenatal testosterone on intrauterine fetal endocrine

Decltype

źródłowym. Bardziej formalnie, reguła #1 ma zastosowanie do beznawiasowych id-expression i wyrażeń dostępu do składowych klasy. Dla wywołań funkcji wydedukowany

Funkcja anonimowa

natychmiastowo-wywoływanymi wyrażeniami funkcyjnymi (ang. immediately-invoked function expression) dobrze to ilustrują: (function(){ ... }()) i (function(){ ... })() Skracając

Permakultura

protects only the expression of an idea, not the idea itself, the Institute confirmed. Copyright protected Bill’s books as an expression of Permaculture

Instrukcja (informatyka)

rozkazu wyrażenie instrukcja zagnieżdżona Statement vs Expression – What's the Difference in Programming? [online], freeCodeCamp.org, 8 grudnia 2022 [dostęp

Ewolucja biologiczna

ISBN 0-521-27455-9. LCCN 82023505. OCLC 9081712. John R. Koza: Genetic Programming: On the Programming of Computers by Means of Natural Selection. Cambridge, MA: