DasAuf der Seite steht, dass jeder Multiplikator in einem regulären Ausdruck mit einem '?' versehen werden kann, um eine nicht gierige Suche durchzuführen. Ich kann jedoch nicht herausfinden, wie ich das in grep zum Laufen bringe.
grep -E '^.*?$' file
druckt den gesamten Text.
Wie kann ich mit grep eine nicht gierige Regex-Suche durchführen?
Antwort1
Sie benötigen grep
PCRE-Unterstützung (Perl Compatible Regular Expression). GNU grep
bietet diese beispielsweise an – kann mit der -P
Option genutzt werden. Es gibt auch ein eigenständiges Programm namens pcregrep
, das auf vielen Systemen mit regulärer Verpackung installiert werden kann.
Beachten Sie, dass -E
ERE (Extended Regular Expression) aktiviert wird, das keine nicht gierige Matching-Unterstützung mit dem ?
Token bietet.
Mit GNU grep
können Sie beispielsweise Folgendes tun:
grep -Po '^.*?foo' file
um vom Anfang an bis zum ersten abzugleichen (und zu extrahieren) foo
.