Um grepzwei verschiedene Zeilen zu verwenden, suchen Sie nach beiden Mustern
$ grep -e sweet -e lemon file_type
This is a sweet
lemon.
Oder benutze alternation
$ grep -E 'sweet|lemon' file_type
This is a sweet
lemon.
Um die nächste Zeile nach einem Muster zu erhalten, können Sie die Kontextoption verwenden
$ grep -A1 sweet file_type
This is a sweet
lemon.
Aber wenn Sie explizit für ein mehrzeiliges Muster suchen, die heikel , weil sind grepdenkt in Linien ... . Sie .*werden alles zwischen "süß" und "Zitrone" auf der Linie fangen . Wir können "lemon" in der nächsten Zeile erhalten, -Pindem wir verwenden, um \ndie neue Zeile abzugleichen, und indem wir sagen, dass grepdie Datei durch Folgendes getrennt ist -z:
$ grep -zPo 'This is a sweet\nlemon' file_type
This is a sweet
lemon.
Anmerkungen:
-EVerwenden Sie erweiterte reguläre Ausdrücke (um |Zeichen für die Abwechslung zu verwenden, ohne sie zu maskieren).
-An Drucken Sie zusätzliche Zeilen nach dem Muster, wobei n die Anzahl der zu druckenden nachfolgenden Zeilen ist
-PVerwenden Sie reguläre Ausdrücke im Perl-Stil ("experimentell" in grep- pcregrepstattdessen installieren für bessere Unterstützung von Perl-Regex)
-zVerwenden Sie das Nullzeichen als Trennzeichen (tun Sie in diesem Fall nur so, als ob Sie es getan hätten, aber grepnehmen Sie unser Wort dafür)
Während der grep -zPBefehl in diesem speziellen Fall funktionieren würde (eine Datei, die aus genau zwei Zeilen besteht), würde er im Allgemeinen jede gewöhnliche durch neue Zeilen getrennte Datei als eine einzelne Zeile betrachten, also entweder den gesamten Dateiinhalt sichern (falls irgendwo eine Übereinstimmung vorliegt) oder nichts; normalerweise wird das nicht verwendet grep.
Marc van Leeuwen
Ja, das ist nur nützlich mit -o... bearbeitet ...
Zanna
Falls dies in anderen Distributionen versucht wird, können Sie auf Folgendes stoßen: grep: The -P and -z options cannot be combined- zB grep (GNU grep) 2.5.1 auf RHEL
Entschuldigung, aber das wird genau "sweet | lemon"
α --sнιη
4
@ KasiyA Diese Zeile funktioniert gut. grepStandardmäßig arbeitet in „Standard - Modus“, in dem „Sonderzeichen“ wie |, +, *interpretiert buchstäblich es sei denn , sie mit einem Backslash maskiert sind. Siehe zum Beispiel diese Antwort . Um die Art und Weise zu verwenden, wie Sie es wahrscheinlich gewohnt sind, dass "Sonderzeichen" maskiert werden müssen, um wörtlich interpretiert zu werden, müssen Sie in den "erweiterten Modus" ( grep -E) wechseln . Vielleicht könnte Madneon seine Antworten etwas genauer erläutern, zum Beispiel was die OPs versucht hätten ?
grep -zP
Befehl in diesem speziellen Fall funktionieren würde (eine Datei, die aus genau zwei Zeilen besteht), würde er im Allgemeinen jede gewöhnliche durch neue Zeilen getrennte Datei als eine einzelne Zeile betrachten, also entweder den gesamten Dateiinhalt sichern (falls irgendwo eine Übereinstimmung vorliegt) oder nichts; normalerweise wird das nicht verwendetgrep
.-o
... bearbeitet ...grep: The -P and -z options cannot be combined
- zB grep (GNU grep) 2.5.1 auf RHELSo was:
quelle
grep
Standardmäßig arbeitet in „Standard - Modus“, in dem „Sonderzeichen“ wie|
,+
,*
interpretiert buchstäblich es sei denn , sie mit einem Backslash maskiert sind. Siehe zum Beispiel diese Antwort . Um die Art und Weise zu verwenden, wie Sie es wahrscheinlich gewohnt sind, dass "Sonderzeichen" maskiert werden müssen, um wörtlich interpretiert zu werden, müssen Sie in den "erweiterten Modus" (grep -E
) wechseln . Vielleicht könnte Madneon seine Antworten etwas genauer erläutern, zum Beispiel was die OPs versucht hätten ?