Wie lässt sich ein bestimmter Absatz basierend auf einem Muster ausgeben?

Wie lässt sich ein bestimmter Absatz basierend auf einem Muster ausgeben?

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[^#]*'
  • -Mfür mehrzeiligegrep
  • -oum nur den übereinstimmenden Teil auszugeben

Antwort2

perl -00ne 'print if /TOO/'
  • -00bedeutet Absatzmodus (Datensätze werden durch eine oder mehrere Leerzeilen getrennt).

verwandte Informationen