Wie verwende ich nicht gierige reguläre Ausdrücke in grep?

Wie verwende ich nicht gierige reguläre Ausdrücke in grep?

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 grepPCRE-Unterstützung (Perl Compatible Regular Expression). GNU grepbietet diese beispielsweise an – kann mit der -POption 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 -EERE (Extended Regular Expression) aktiviert wird, das keine nicht gierige Matching-Unterstützung mit dem ?Token bietet.

Mit GNU grepkönnen Sie beispielsweise Folgendes tun:

grep -Po '^.*?foo' file

um vom Anfang an bis zum ersten abzugleichen (und zu extrahieren) foo.

verwandte Informationen