Wer (komplexe) Perl-Kompatible reguläre Ausdrücke auf der Linux-Konsole ausführen möchte, der hat zwei Möglichkeiten.
- “grep -P” benutzen. Dies ist allerdings nicht immer möglich. Debian kompiliert die Unterstützung für diese Funktion in seine Standardpakete nicht ein. Wer sich dennoch grep nicht selbst kompilieren möchte, der kann
- das Paket pcregrep benutzen.
pcregrep ist zudem schneller als grep -E.
Hier ein direkter Vergleich um IPs aus einem 15 MB großen access.log zu filtern:
1 2 3 4 5 | time grep --color=none -o -E '^[0-9.]+\s' access.log > /dev/null real 0m1.890s user 0m1.864s sys 0m0.026s |
1 2 3 4 5 | time pcregrep -o '^[0-9.]+(?=\s)' access.log > /dev/null real 0m0.050s user 0m0.046s sys 0m0.004s |
Das bedeutet, pcregrep ist ca. 4-Mal so schnell wie das Standardgrep. Dies kann bei größeren Log-Dateien (im GB-Bereich) schnell einen Unterschied in Minutengröße zur Folge haben.
