
Wie kann ich erreichen, dass Tools wie diese grep
mehrzeilige 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 grep
nach 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 sed
oder möglich ist awk
, um dasselbe Ergebnis zu erzielen, ebenfalls willkommen.
Antwort1
So awk
stellen 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 ...