Pokud denně prohledáváte textové soubory, určitě jste s grepem a regulárními výrazy jedna ruka. Pokud to ale děláte jen občas, mohly by se vám následující tipy hodit. Zjištění každého z nich provázelo mé nadšení, protože značně zjednodušily to, co jsem potřeboval udělat.
(Ano, mohl jsem si přečíst manuálovou stránku a dozvěděl bych se je všechny najednou...)
To na webu najdete ve většině návodů, operátor je svislítko. Co ale ve většině návodů nenajdete je, že OR umí až rozšířená syntaxe a že se musí grepu nařídit parametrem -E. Nebo použitím egrep:
egrep "a|b"
Regulární výrazy jsou velmi mocný nástroj na vyhledání textu, grep nám vrací řádky, které text obsahují, například pro řádky obsahující TST:
grep "TST"
Opačná úloha, vypsat řádky, které daný text neobsahují, se vyskytuje také často, ale regulární výrazy v ní už z podstaty pokulhávají.
Dá se použít lookahead, ale kdo si něco takového má pamatovat?
egrep "((?!TST).)*"
Přitom v jakémkoliv programovacím jazyce je to nesmírně snadné, buď vypisuji řádky, pro které regulární výraz zabral a přeskakuji ty ostatní, nebo naopak. A přesně pro tohle má grep parametr -v.
grep -v "TST"
Typicky při prohledávání logů z nějakého systému potřebujete znát kontext.
Hledáte hlášení o chybě a potřebujete vědět, co se dělo před ní, co ji způsobilo. Grep na to má parametr -B (jako before, před) následovaný počtem řádků:
egrep -B 10 "Je to rozbitý!"
Nebo hledáte stacktrace, najdete první řádek, a potřebujete ho vidět celý, tj. i s následujícími dvaceti řádky. Parametr je -A (jako after, po):
egrep -A 20 "java.lang.Exception"
Případně hledáte přihlášení konkrétního uživatele a potřebujete vědět jednak co mu předcházelo, jednak co dělal potom. Parametr se jmenuje -C (jako context):
egrep -C 40 "Uživatel Asmodeus666 se přihlásil"
Někdy se hodí vědět pouze kolikrát daný jev nastal, třeba když počítáme přihlášené uživatele. Parametr je -c (count)
egrep -c "se přihlásil"
Při nekoncepčním logu se můžou vyskytovat stejné texty různými velikostmi písmen, grep ale rozdíly může ignorovat pomocí parametru -i (ignore case)
egrep -i "Se pŘiHláSiL"
Hodnocení hvězdičkami používá jako prevenci
opakovaného kliknutí anonymní cookie.
Pokud s tím nesouhlasíte, neklikejte.
Další podrobnosti k cookies zde.