Wuwejův zápisník

Nejužitečnější parametry a konstrukce pro grep

11.07.2011 23:59, Wu | počítače | komentáře -

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...)

OR v regulárních výrazech

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"

Negace regulárního výrazu

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"

Řádky před, za a kolem nalezeného řetězce

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"

Počet odpovídajících řádků

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"

Ignorování velikosti písmen

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"

12345
1310421540000

Informace

Kontakt

Google search

Kategorie

Archiv

STRÁNKY ARCHIVOVÁNY NÁRODNÍ KNIHOVNOU ČR

CBDB.cz – Databáze knih a spisovatelů, knihy online