Ukaz grep izpiše vrstice datoteke ali izpisa drugega ukaza, v katerih se pojavi iskano besedilo. Pri pregledovanju dnevniških datotek pa sam zadetek pogosto ne zadošča: vrstice pred napako PHP ali neuspešno prijavo in za njo pokažejo, kaj je vodilo do napake in kaj se je zgodilo nato. Za to so namenjena stikala za kontekst (context).
Osnovno iskanje
grep 'valami' /path/to/file.log
Vrstice pred zadetkom: -B
Stikalo -B (before) izpiše navedeno število vrstic tudi pred zadetkom:
grep -B 5 'valami' /path/to/file.log
To pred vsakim zadetkom pokaže 5 vrstic.
Vrstice za zadetkom: -A
Stikalo -A (after) izpiše vrstice za zadetkom:
grep -A 3 'valami' /path/to/file.log
To za vsakim zadetkom pokaže 3 vrstice. Uporabno je na primer pri večvrstičnih sporočilih o napakah (stack trace), kjer je bistvo pod vrstico z napako.
Vrstice na obeh straneh: -C
Če pred zadetkom in za njim potrebuješ enako število vrstic, uporabi stikalo -C (context):
grep -C 2 'valami' /path/to/file.log
Za različno število vrstic lahko stikali navedeš skupaj: grep -B 5 -A 2 'valami' fajl.log izpiše 5 vrstic pred zadetkom in 2 za njim.
Če konteksti več zadetkov padejo drug ob drugega, jih grep združi v en blok, ločene bloke pa loči z vrstico --. V 30-vrstični testni datoteki je za zadetke v 10., 13. in 25. vrstici grep -n -C 2 dal to (za številko vrstice : označuje zadetek, - pa okoliško vrstico):
8-sor 8
9-sor 9
10:sor 10 HIBA
11-sor 11
12-sor 12
13:sor 13 HIBA
14-sor 14
15-sor 15
--
23-sor 23
24-sor 24
25:sor 25 HIBA
26-sor 26
27-sor 27
Poudarjanje in druga uporabna stikala
--color=auto: v izpisu poudari zadetek (deluje tudi zapis--colour). V veliko distribucijah je to privzeto vklopljeno.-n: izpiše številke vrstic, zato mesto zlahka najdeš tudi v datoteki.-i: ne razlikuje velikih in malih črk.-r: rekurzivno išče v mapi in njenih podmapah.-v: izpiše vrstice, ki se ne ujemajo.-E: uporablja razširjen regularni izraz, na primergrep -E 'error|warning'.
Celoten primer, ki išče s številkami vrstic, poudarjanjem ter 5 vrsticami pred zadetkom in 2 za njim:
grep -n --color=auto -B 5 -A 2 'Fatal error' /var/www/oldal/error_log
Praktični primeri
# Zahteve enega naslova IP v dnevniku Apache, z okoliškimi vrsticami
grep -C 3 '203.0.113.25' /var/log/httpd/access_log
# Neuspešne prijave SSH v AlmaLinux/Rocky Linux
grep -B 2 'Failed password' /var/log/secure
# Dnevnik storitve pod systemd, filtriran z grep
journalctl -u nginx --no-pager | grep -A 5 'error'
# Iskanje v starih, rotiranih dnevnikih (v stisnjenih in nestisnjenih datotekah)
zgrep -C 3 'valami' /var/log/messages-*
V AlmaLinux in Rocky Linux logrotate privzeto ne stiska (#compress v datoteki /etc/logrotate.conf): stari dnevniki so nestisnjene datoteke oblike messages-20261020, zato vzorec *.gz ne bi dal zadetka. V Debianu in Ubuntuju imajo zavrteni dnevniki običajno končnico .gz. zgrep išče v obeh vrstah; v preizkusu je vrstice našel v nestisnjeni in v datoteki .gz.
V Debianu in Ubuntuju je dnevnik Apacheja v /var/log/apache2/, dnevnik prijav pa v datoteki /var/log/auth.log. O mestu in branju dnevniških datotek govori naš članek o journalctl in /var/log, o ravnanju s prevelikimi dnevniki napak pa vodnik za iskanje in brisanje velikih datotek error_log.