Program grep zobrazuje řádky ze souborů obsahující předané regulární výrazy. První verzi vytvořil Ken Thompson v Bellových laboratořích kolem roku 1974. Program se stal součástí většiny unix-like operačních systémů a ze slova grep se stalo sloveso používané podobně jako sloveso googlit. Oblíbená je fráze:
You can’t grep dead trees.
Znamenající že je jednoduší vyhledávat v digitálním obsahu než v tom vyrobeném z mrtvých stromů (papír).
Připravíme si soubor kurz.txt
na kterém si možnosti grepu představíme.
Pro stažení aktuálních kurzu můžete použít curl nebo si soubor stáhnout a uložit v prohlížeči z ČNB:
$> curl "https://www.cnb.cz/cs/financni-trhy/devizovy-trh/kurzy-devizoveho-trhu/kurzy-devizoveho-trhu/denni_kurz.txt" >> "kurz.txt"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 983 100 983 0 0 11099 0 --:--:-- --:--:-- --:--:-- 11298
Pro kontrolu souboru použijeme příkaz head -n 5 kurz.txt
, který zobrazí prvních pět řádků:
$> head -n 5 kurz.txt
24.07.2020 #142
země|měna|množství|kód|kurz
Austrálie|dolar|1|AUD|16,040
Brazílie|real|1|BRL|4,325
Bulharsko|lev|1|BGN|13,428
Základní příkaz se skládá z názvu programu grep, hledaného výrazu a souborů, které chceme prohledat.
Vypíšeme všechny řádky obsahují řetězec "koruna"
:
$> grep koruna kurz.txt
Dánsko|koruna|1|DKK|3,528
Island|koruna|100|ISK|16,644
Norsko|koruna|1|NOK|2,456
Švédsko|koruna|1|SEK|2,558
Hledaný výraz je definován regulárním výrazem. Pro vyhledání řádku začínajících na "B"
nebo "K"
:
$> grep "^[BK]" kurz.txt
Brazílie|real|1|BRL|4,325
Bulharsko|lev|1|BGN|13,428
Kanada|dolar|1|CAD|16,855
Korejská republika|won|100|KRW|1,880
Příkaz můžeme rozšířit o přepínače upravující chování programu.
Například přepínač -i
upraví chování tak že ignoruje malá a velká písmena.
Regulární výrazy je vhodné obalit do uvozovek, aby bylo jednoznačné kde výraz začíná a končí:
$> grep -i "velká británie" kurz.txt
Velká Británie|libra|1|GBP|28,867
Chceme-li zjistit počet řádků obsahující výraz, použijeme přepínač -c
.
Například pro zjištění kolik států má jako měnu dolar:
$> grep -c dolar kurz.txt
6
Pokud naopak chceme zjistit kolik řádku neobsahuje dolar aplikujeme přepínač -v
.
Ten zobrazí řádky neobsahující předložený výraz.
V kombinaci s přepínačem -c
pak získáme počet řádků:
$> grep -cv dolar kurz.txt
29
Pro zobrazení čísel řádku slouží přepínač -n
:
$> grep -n euro kurz.txt
8:EMU|euro|1|EUR|26,265
Pro zobrazení souborů obsahující hledaný výraz aplikujeme přepínač -l
.
Soubory s příponou txt v aktuálním adresáři obsahující výraz "měna"
:
$> grep -l měna *.txt
kurz.txt
Občas se hodí zobrazit více obsahu než jen řádek, kde se nachází hledaný výraz, tak zvaný kontext.
K tomu slouží přepínače -A
, -B
nebo -C
.
Ty následuje číselná hodnota udávající kolik dalších řádků se má zobrazit, v případě přepínače -A
za nalezeným řádkem (after), v případě -B
před řádkem (before) a v obou směrech v případě -C
(context):
$> grep -C 1 Polsko kurz.txt
Nový Zéland|dolar|1|NZD|15,002
Polsko|zlotý|1|PLN|5,963
Rumunsko|leu|1|RON|5,436
Grep můžeme použít i na výstup jiného příkazu. Zde je první výstup z programu grep použit pro další hledání:
$> grep -nh -e koruna -e dolar *.txt | grep -F No
24:Norsko|koruna|1|NOK|2,456
25:Nový Zéland|dolar|1|NZD|15,002
Manuál s úplným výčtem možnosti nastavení zobrazíme příkazem man grep
.
Můžete zkusit zjistit co dělají přepínače z předchozího příkladu.
Grep ve výchozím nastavení používá základní regulární výrazy BRE.
Pomocí přepínače -E
se výrazy interpretují jako rozšířené regulární výrazy ERE.
V případě že nechce výraz interpretovat jako regulární výraz použijeme -F
.
Pro operační systém Windows existuje alternativa nazvaná findstr.