sed, erhalte einen Fehler: sed: nicht beendet {

sed, erhalte einen Fehler: sed: nicht beendet {

Ich verwende den folgenden sed-Befehl

sed -n '\|<tag>|{:n; \|</tag>|!{N;bn}; y|\n| |;p }' test.xml

AUSGABE:

<tag> <name>jolly</name> <class>2nd</class> <address>  </address> </tag>
<tag> <name>james</name> <class>3rd</class> <address></address> </tag>
<tag> <name>dolly</name> <class>4th</class> <address> <city>delhi</city> </address> </tag>

Dieser Befehl funktioniert in Bash einwandfrei. In der Shell /bin/sh(BusyBox sed version:v1.19.0) wird jedoch der folgende Fehler ausgegeben

sed: unterminated {

Wie kann ich diesen Fehler beheben, was ist falsch?

Antwort1

GNU sedhatte viele Erweiterungen weit weg vonStandard-Sed. Eine davon ist das Zulassen mehrerer Befehle in derselben Zeile zwischen {und }. Es gibt keine Garantie dafür, dass die Verwendung einer dieser Erweiterungen in anderen sed-Implementierungen funktioniert.

Busybox sedist eine Minimalversion, Sie sollten also bei der Standardsyntax bleiben, damit es funktioniert:

busybox sed -n '/<tag>/ {
  :n
  /<\/tag>/!{
    N
    bn
  }
  y/\n/ /
  p
}' <file

verwandte Informationen