BreiteSeites Blog

home impressum

grep vs. pcregrep

23 Feb 2011

Wer (komplexe) Perl-Kompatible reguläre Ausdrücke auf der Linux-Konsole ausführen möchte, der hat zwei Möglichkeiten.

  1. "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
  2. 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:

time grep --color=none -o -E '^[0-9.]+\s' access.log > /dev/null

real    0m1.890s
user    0m1.864s
sys     0m0.026s
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.