Gemäß grep --help
und man grep
können wir die -P
Option 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 -i
Option, die ein Beispiel für einen Modifikator ist, einen Mustervergleich ohne Berücksichtigung der Groß- und Kleinschreibung durchführen kann .
quelle
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--P
Funktion verwenden müssen.Antworten:
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.
grep
nicht.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
. ZBgrep -P "(?i)foobar"
wird eine Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung sein.quelle