grep
grep je počítačový program s rozhraním pro příkazový řádek původně psaný pro operační systém Unix, nyní je dostupný i pro většinu systémů Unixového typu (například Linux, FreeBSD, Mac OS a další). Načte textová data ze souborů nebo standardního vstupu a na základě regulárního výrazu vypíše na standardní výstup řádky, které danému regulárnímu výrazu vyhovují.[1][2]
Vývojář | Ken Thompson |
---|---|
Operační systém | Unix UN*X |
Typ softwaru | standardní UNIXová utilita či příkaz |
Některá data mohou pocházet z datové položky. |
Historie
Grep byl původně vytvořen Kenem Thompsnem jako samostatná aplikace z parseru regulárních výrazů pro ed (který také vytvořil).[3]
Název pochází z příkazu edu:
g/
re/p
znamená „search globally for lines matching the regular expression re, and print them“ – najdi řádek vyhovující regulárnímu výrazu a vypiš ho.[4][5] Poprvé se grep objevil v manuálu Unixu verze 4, 3. březen 1973.[6]
Příklady
Najde všechny soubory v aktuálním adresáři obsahující řetězec „foo“:
grep foo *
Najde všechny soubory v aktuálním adresáři (reprezentovaný tečkou „.“) a podadresářích obsahující řetězec „foo“:
grep -r foo .
Totéž co předchozí, ale pouze vypíše názvy souborů obsahující řetězec:
grep -rl foo .
Použití
Grep vyhledává v souborech předaných jako parametr, pokud parametr chybí hledá ve standardním vstupu. Ve výchozím nastavení vypisuje vyhovující řádky na standardní výstup, ale program může přijímáním parametrů měnit funkčnost.
Jednoduchý příklad běžného použití grepu, hledá v souboru fruitlist.txt řádky obsahující textový řetězec apple:
$ grep apple fruitlist.txt
Vyhovující řetězec se objeví pokud je rozpoznána sekvence znaků, například řádky obsahující pineapple nebo apples jsou také vytištěny i přes to že se řetězec apple vyskytuje uvnitř slova. Grep je ve výchozím nastavení náchylný na velikost písmen, tudíž řádky obsahující Apple (s velkým písmenem) nebudou vytištěny pokud zároveň neobsahují apple. Pro nenáchylnost na velikost písmen je potřeba přidat parametr -i (ignore case).
Příkaz může přebírat vícero souborů v seznamu argumentů. Například, všechny soubory mající koncovku .txt v daném adresáři mohou být prohledány pomocí hvězdičky jako součást jména souboru pokud terminál obsahuje podporu žolíkových znaků:
$ grep apple *.txt
Pro hledání (mnohem) složitějších frází mohou být použity regulární výrazy. Následující příkaz vytiskne všechny řádky ze souborů které začínají písmenem a, následovaným jakýmkoliv písmenem a pokračujícím ple.
$ grep ^a.ple fruitlist.txt
Jako většina Unixových příkazů, i grep přijímá argumenty příkazové řádky pro změnu nastavení a chování. Například argument -l (malé písmeno L) poskytuje seznam souborů obsahující poskytnutý řetězec místo toho, aby vytiskl inkriminované řádky.
Vytisknutí řádků obsahující pouze slovo apple ohraničené bílými znaky nebo uvozovkami, může být dosaženo předáním volby -w.
Pokud chceme pouze řádky které celé přesně vyhovují podmínce, používá se volba -x. Řádky obsahující jen a pouze slovo apple jsou nalezeny právě volbou -x.
$ cat fruitlist.txt #vypsání souboru apple apples pineapple apple- apple-fruit fruit-apple $ grep -x apple fruitlist.txt #nalezení apple
Volba -v zneguje výsledek vyhledávání a vytiskne řádky neobsahující slovo apple.
$ grep -v apple fruitlist.txt banana pear peach orang
Varianty
K dispozici je mnoho variant grepu napříč operačními systémy nástroji pro vývoj software. Rané varianty jako egrep a fgrep byly představeny v Unixu verze 7. Příkaz egrep používá rozšířenou syntaxi regulárních výrazů která byla do Unixu přidána po verzi Kena Thompsona. Příkaz fgrep vyhledává kterýkoliv obyčejný řetězec v daném seznamu za použití algoritmus Aho-Corasick. Tyto varianty přežívají v moderní implementaci grepu jako jeho parametry (a standardizovány jako -E a -F v normě POSIX[7])) a jako aliasy tohoto příkazu. Tyto aliasy se používají aby simulovaly zaniklé implementace grepu.
Další příkazy obsahují slovo „grep“ jako indikaci, že program něco vyhledává. Příkladem budiž utilita pgrep, vyhledávající v běžících procesech, které odpovídají regulárnímu výrazu.
Ve skriptovacím jazyku Perl se používá „grep“ jako název integrované funkce pro hledání prvků v seznamu. Tato funkce se ve funkcionálním programování obvykle označuje jako filtr.
Příkaz pcegrep
je implementace grepu používající syntaxi regulárních výrazů z Perlu. Tato funkcionalita může být v grepu vyvolána parametrem -P.[8]
Grep byl také portován na platformu Microsoft Windows (například pomoci Cygwin a GnuWin32). Některé verze Windows nabízí podobnou funkcionalitu s příkazy qgrep
nebo Findstr.[9]
Reference
V tomto článku byl použit překlad textu z článku grep na anglické Wikipedii.
- Hauben et al. 1997, Ch. 9
- RAYMOND, Eric. Jargon File [online]. [cit. 2006-06-29]. Dostupné online.
- KERNIGHAN, Brian. The Unix Programming Environment. [s.l.]: Prentice Hall, 1984. Dostupné online. ISBN 0-13-937681-X. S. 102. (anglicky)
- http://perl.plover.com/classes/HoldSpace/samples/slide012.html
- http://robots.thoughtbot.com/how-grep-got-its-name
- http://minnie.tuhs.org/cgi-bin/utree.pl?file=V4/man/man1/grep.1
- grep – Commands & Utilities Reference, The Single UNIX Specification, Issue 7 from The Open Group
- http://linux.die.net/man/1/grep
- SPALDING, George. Windows 2000 administration. [s.l.]: Osborne/McGraw-Hill, 2000. (Network professional's library). Dostupné online. ISBN 978-0-07-882582-8. S. 634. (anglicky)
Externí odkazy
- Obrázky, zvuky či videa k tématu grep na Wikimedia Commons
- GNU grep (Němec)
- Network grep – A packet analyzer used to match patterns at the network layer
- „why GNU grep is fast“ – implementation details from GNU grep's author.