Kann ich grep so veranlassen, maskierte Mehrzeilenzeilen als eine einzelne Zeile zu behandeln?

Kann ich grep so veranlassen, maskierte Mehrzeilenzeilen als eine einzelne Zeile zu behandeln?

Wie kann ich erreichen, dass Tools wie diese grepmehrzeilige Zeilen, die mit einem Backslash maskiert sind, als lange Einzelzeile behandeln?

Nehmen wir an, ich habe einige Dateien, die so aussehen:

testvar=test1 \
        test2 \
        test3

othervar=oth1 \
         oth2

Wenn ich jetzt grepnach Testvar suche, wird es zurückgegeben testvar=test1 \, aber gibt es eine Möglichkeit, es zurückgeben zu lassen testvar=test1 test2 test3?

Wie behandelt man diese mehreren maskierten Zeilen mehr oder weniger als eine einzige Zeile?

Notiz: Wenn dies mit nicht möglich ist grep, sind Hinweise, wie dies mit anderen Tools wie sedoder möglich ist awk, um dasselbe Ergebnis zu erzielen, ebenfalls willkommen.

Antwort1

So awkstellen Sie die Feldtrennzeichen und Datensatztrennzeichen entsprechend Ihrem Anwendungsfall ein:

awk 'BEGIN { FS="\n"; RS ="" } /testvar/' yourfile
testvar=test1 \
        test2 \
        test3

Siehe den Handbucheintrag fürmehrzeilige Datensätze.

Antwort2

Sie können es mit etwas vorverarbeiten, das diese Zeilen verbindet, etwa:

awk 'match($0,/\\+$/) && RLENGTH % 2 {
       sub(/\\$/,""); printf "%s", $0; next
     }
     {print}' | grep ...

verwandte Informationen