Wie man ein Muster für neue Zeile in Grep gibt?
Wie man ein Muster für die neue Zeile in grep?
Neue Zeile am Anfang der neuen Zeile am Ende. Nicht dem regulären Ausdruck Weg. So etwas wie "\n".
Kommentar zu dem Problem - Öffnen
Es ist nicht klar, was Sie wollen.
neue Zeile am Anfang
wird eine Leerzeile und neue Zeile am Ende
gilt für jede Zeile in der Datei. Kannst du ein Beispiel? Eigentlich können Sie nur verwenden Sie
$
. Es ist etwas eingeschränkt, aber brauchbar in einfachen Fällen. gnu.org/software/grep/manual/grep.html#Usage siehe Punkt 15.
InformationsquelleAutor der Frage tuxnani | 2012-09-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
grep
Muster sind aufeinander abgestimmt, gegen einzelne Zeilen, so gibt es keine Möglichkeit für ein Muster, das auf ein newline found in input.Jedoch finden Sie leere Zeilen wie diese:
InformationsquelleAutor der Antwort arash kordi
versuchen
pcregrep
statt der regulärengrep
:den
-M
option erlaubt es, übereinstimmung über mehrere Zeilen, so können Sie die Suche für Zeilenumbrüche als\n
.InformationsquelleAutor der Antwort nullrevolution
Können Sie auf diese Weise...
-P
ist für Perl regular expressions (eine Erweiterung der POSIX -grep
).\s
match der white-space-Zeichen; wenn gefolgt von*
es entspricht einer leeren Zeile auch.^
entspricht dem Anfang der Zeile.$
entspricht dem Ende der Zeile.InformationsquelleAutor der Antwort Mani BK sys
Als für den workaround (ohne Verwendung von nicht-tragbaren
-P
), können Sie temporäre zu ersetzen, eine neue-Zeile-Zeichen mit der anderen ein und ändern Sie es zurück, z.B.:Im Grunde ist es das suchen nach genauen übereinstimmungen
_foo_
wo_
bedeutet\n
(so__
=\n\n
). Sie nicht haben, um es zu übersetzen, zurück durchtr '_' '\n'
, wie jedes Muster gedruckt werden, in die neue Linie jedenfalls, so entfernen_
ist genug.InformationsquelleAutor der Antwort kenorb
Dank @jarno weiß ich über die option-z, und ich fand heraus, dass bei der Verwendung von GNU grep mit der option-P, Abgleich gegen
\n
ist möglich. 🙂Beispiel:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
Drucke
bar
InformationsquelleAutor der Antwort rubystallion