grep

grep
VývojářKen Thompson
Operační systémUnix
UN*X
Typ softwarustandardní UNIXová utilita či příkaz
Některá data mohou pocházet z datové položky.

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]

Historie

Grep byl původně vytvořen Kenem Thompsonem 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 egrepfgrep 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 CygwinGnuWin32). 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.

  1. Hauben et al. 1997, Ch. 9
  2. RAYMOND, Eric. Jargon File [online]. [cit. 2006-06-29]. Dostupné online. 
  3. KERNIGHAN, Brian. The Unix Programming Environment. [s.l.]: Prentice Hall, 1984. Dostupné online. ISBN 0-13-937681-X. S. 102. 
  4. http://perl.plover.com/classes/HoldSpace/samples/slide012.html
  5. http://robots.thoughtbot.com/how-grep-got-its-name
  6. http://minnie.tuhs.org/cgi-bin/utree.pl?file=V4/man/man1/grep.1
  7. grep – Commands & Utilities Reference, The Single UNIX Specification, Issue 7 from The Open Group
  8. http://linux.die.net/man/1/grep
  9. 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. 

Externí odkazy

Média použitá na této stránce

Grep example.png
Autor:

Software: The Open Group and GNU Project

Screenshot:

VulcanSphere, Licence: GPL
Screenshot of grep command