[Python-de] grep Logfiles mit re

Diez B. Roggisch deets at web.de
Don Jan 26 14:14:40 CET 2006


> ich bin gerade dabei, ein shell Skript in Python zu überführen, bin aber
> nicht so zufrieden mit dem ersetzen eines "grep" Aufrufes.
> Hier ist er :
>
> grep "\(ERROR\)\|\(CRIT\)\|\(ALERT\)\|\(EMERG\)" ...
>
> Wie man sieht sollen einfach alle Zeilen mit den Begriffen in
> Großbuchstaben ausgegeben werden.
>
> Der erste Versuch war:
>
> findErr=re.compile('^.*(ERROR)|(CRIT)|(ALERT)|(EMERG).*$' ,re.M)
>
> was natürlich gescheitert ist an dem Gruppen-Handling in re.
>
> Eine funktionierende Lösung ist:
>
>  re.compile('^.*(?:ERROR.*$)|(?:CRIT.*$)' ,re.M)
>
> allerdings ist hier das in die Klammer reingezogene ".*$" sehr unschön -
> kann man das nicht irgendwie besser machen ?

Es rausziehen?

findErr=re.compile('^.*(?:ERROR|CRIT|ALERT|EMERG).*$' ,re.M)

Oder zeilenweise arbeiten, wie es grep auch tut - dann reicht ein simples 
match, und abhängig davon packst du die Zeile in das Ergebnis.

Diez