Verwenden von Modifikatoren für Perl-kompatibles Regex (PCRE) in grep

7

Gemäß grep --helpund man grepkönnen wir die -POption verwenden, um das Muster als regulären Perl-Ausdruck (PCRE, um genau zu sein) anstelle der standardmäßigen regulären POSIX-Basisausdrücke (BRE) zu interpretieren .

In der Perl-Sprache können dem Ausdruck verschiedene Modifikatoren hinzugefügt werden, um die Musterinterpretation (in der Syntax von /pattern/modifiers) anzupassen .

Also, wie kann jemand Add - Modifikatoren zu dem regulären Perl - Ausdruck des grep? Ich habe einige Variationen ausprobiert, grep -P "/^got.it$/ms" [FILE]aber die Suchergebnisse waren falsch.

In Bezug auf die PCRE-Interpretation weist das Handbuch jedoch darauf hin, dass:

Dies ist sehr experimentell und grep -P warnt möglicherweise vor nicht implementierten Funktionen.

Ist es möglich, dass das grep-Tool überhaupt keine Modifikatoren unterstützt ?

Übrigens ist mir aufgefallen, dass man mit der -iOption, die ein Beispiel für einen Modifikator ist, einen Mustervergleich ohne Berücksichtigung der Groß- und Kleinschreibung durchführen kann .

Betrachtung
quelle
Crossposted: askubuntu.com/questions/410565/… ... was in Ordnung ist, aber Sie sollten dies angeben!
Goldlöckchen
Beachten Sie, dass PRCE-kompatible Regexe nicht in allen Versionen von grep: verfügbar sind. Das standardmäßige POSIX-OpenBSD ohne Gnu unterstützt diese nicht sofort, aber GNU grep kann installiert werden, wenn Sie die PCRE- -PFunktion verwenden müssen.
Mark

Antworten:

8

PCREs sind nicht buchstäblich Perl; Sie verwenden eine eigenständige C-Bibliothek, libpcre. Manchmal „PCRE - Stil“ wird auch zu beziehen, zB andere Sprachen verwendet , die regexps mit den gleichen / ähnlichen Muster implementieren, auch wenn sie sich nicht auf libpcre (Anmerkung grep ist die tatsächliche libpcre verwenden).

Genau genommen enthält ein regulärer Ausdruck keine Modifikatoren, 1 sondern nur ein Muster. Einige Regexp- Schnittstellen (z. B. Perls ) ermöglichen die Verwendung von Modifikatoren zusammen mit den Mustern. grepnicht.

Auch in Bezug auf die Mustersemantik gibt es einige Unterschiede . Denken Sie auch hier daran, dass es nicht wirklich Perl ist, sondern etwas, das darauf basiert.


1. Es sei denn, sie befinden sich tatsächlich innerhalb des Musters , mit dem Sie arbeiten können grep. ZB grep -P "(?i)foobar"wird eine Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung sein.

Goldlöckchen
quelle