
Ich habe unten eine Beispieldatei:
# This is a test file. This is a test file. This is a test file
This is a test file. This is a test file. This is a test file.
This is a test file.
# Need to output just this paragraph.Need to output just this paragraph.
Need to output just this paragraph TOO. Need to output just this paragraph.
Need to output just this paragraph.
Ich muss nur den zweiten Absatz ausgeben, beginnend mit „#“, bis zum letzten Satz im Absatz.
Wie führe ich ein Greppen und eine Ausgabe basierend auf dem Muster durch? Angenommen, die Datei enthält mehrere Absätze und ich möchte den Absatz ausgeben, der das Wort „TOO“ enthält.
Antwort1
Wenn die Absätze durch Leerzeilen getrennt sind:
awk -v RS= -v ORS='\n\n' /TOO/
Ein leeres Datensatztrennzeichen ( RS
) bedeutetAbsatzmoduswobei Datensätze durch Folgen von Leerzeilen getrennt sind.
Wenn sie #
getrennt sind:
awk -v RS='#' '/TOO/ {print RS $0}'
oder
pcregrep -Mo '#[^#]*?TOO[^#]*'
-M
für mehrzeiligegrep
-o
um nur den übereinstimmenden Teil auszugeben
Antwort2
perl -00ne 'print if /TOO/'
-00
bedeutet Absatzmodus (Datensätze werden durch eine oder mehrere Leerzeilen getrennt).