grep

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Možná hledáte: Grapefruit, druh ovoce.

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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í[editovat | editovat zdroj]

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říjí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 v vychozí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í
appl 

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[editovat | editovat zdroj]

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ž ulita 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[editovat | editovat zdroj]

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. grep [online]. [cit. 2006-06-29]. Dostupné online. (anglicky) 
  3. Kernighan, Brian(1984). The Unix Programming Environment.Prentice Hall, 102. ISBN 0-13-937681-X. 
  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(2000). Windows 2000 administration, Network professional's library.Osborne/McGraw-Hill, 634. ISBN 978-0-07-882582-8. Ověřeno k 2010-12-10. “QGREP.EXE[:] A similar tool to grep in UNIX, this tool can be used to search for a text string” 

Externí odkazy[editovat | editovat zdroj]