A grep parancs egy fájl vagy egy másik parancs kimenetének azokat a sorait írja ki, amelyekben a keresett szöveg előfordul. Naplófájlok vizsgálatakor azonban gyakran nem elég maga a találat: egy PHP-hiba vagy egy sikertelen bejelentkezés előtti és utáni sorok mutatják meg, mi vezetett a hibához, és mi történt utána. Erre szolgálnak a környezeti (context) kapcsolók.
Alap keresés
grep 'valami' /path/to/file.log
Sorok a találat előtt: -B
A -B (before) kapcsoló után megadott számú sort a találat előtt is kiírja:
grep -B 5 'valami' /path/to/file.log
Ez minden találat előtt 5 sort mutat meg.
Sorok a találat után: -A
Az -A (after) kapcsoló a találat utáni sorokat írja ki:
grep -A 3 'valami' /path/to/file.log
Ez minden találat után 3 sort mutat meg. Hasznos például a többsoros hibaüzeneteknél (stack trace), ahol a lényeg a hibasor alatt található.
Sorok mindkét oldalon: -C
Ha a találat előtt és után ugyanannyi sorra van szüksége, használja a -C (context) kapcsolót:
grep -C 2 'valami' /path/to/file.log
Eltérő számú sorhoz a két kapcsoló együtt is megadható: a grep -B 5 -A 2 'valami' fajl.log a találat előtti 5 és utáni 2 sort írja ki.
Ha több találat környezete egymás mellé esik, a grep egyetlen blokkba vonja össze őket, a különálló blokkokat pedig -- sorral választja el. Egy 30 soros próbafájlban, a 10., 13. és 25. sorban lévő találatokra a grep -n -C 2 ezt adta (a sorszám után : jelzi a találatot, - a környező sort):
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
Kiemelés és további hasznos kapcsolók
--color=auto: kiemeli a találatot a kimenetben (a--colourírásmód is működik). Sok disztribúcióban ez alapból be van kapcsolva.-n: kiírja a sorok számát, így a fájlban is könnyen megtalálja a helyet.-i: nem különbözteti meg a kis- és nagybetűket.-r: egy mappában és annak almappáiban keres rekurzívan.-v: a nem egyező sorokat írja ki.-E: kiterjesztett reguláris kifejezést használ, példáulgrep -E 'error|warning'.
Egy teljes példa, amely sorszámmal, kiemeléssel és a találat előtti 5 és utáni 2 sorral keres:
grep -n --color=auto -B 5 -A 2 'Fatal error' /var/www/oldal/error_log
Gyakorlati példák
# Egy IP-cím kérései az Apache naplójában, a környező sorokkal
grep -C 3 '203.0.113.25' /var/log/httpd/access_log
# Sikertelen SSH-bejelentkezések AlmaLinux/Rocky Linux alatt
grep -B 2 'Failed password' /var/log/secure
# Egy szolgáltatás naplója systemd alatt, a grep-pel szűrve
journalctl -u nginx --no-pager | grep -A 5 'error'
# Régi, elforgatott naplókban keresés (tömörített és tömörítetlen fájlokban is)
zgrep -C 3 'valami' /var/log/messages-*
AlmaLinuxon és Rocky Linuxon a logrotate alapból nem tömörít (#compress a /etc/logrotate.conf fájlban): a régi naplók messages-20261020 formájú, tömörítetlen fájlok, ezért a *.gz mintára nem lenne találat. Debianon és Ubuntun az elforgatott naplók jellemzően .gz kiterjesztésűek. A zgrep mindkét fajtában keres; a teszten egy tömörítetlen és egy .gz fájlban is megtalálta a sorokat.
Debian és Ubuntu alatt az Apache naplója a /var/log/apache2/, a bejelentkezési napló a /var/log/auth.log fájlban található. A naplófájlok helyéről és olvasásáról a journalctl és /var/log cikkünk szól, a túl nagyra nőtt hibanaplók kezeléséről pedig a nagy error_log fájlok megkereséséről és törléséről szóló útmutató.