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.