sed、エラーを受け取る:sed:終了しない{

sed、エラーを受け取る:sed:終了しない{

次のsedコマンドを使用しています

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

出力:

<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>

このコマンドはbashでうまく機能します。ただし、/bin/sh(BusyBox sed version:v1.19.0) シェルで次のエラーが発生します。

sed: unterminated {

このエラーをどのように修正しますか?何が問題ですか?

ベストアンサー1

GNU sed遠い距離が多い標準 sed。その1つは、との{間の同じ行に複数のコマンドを許可することです}。拡張機能を使用しても他のsed実装で動作するという保証はありません。

忙しい sedは最小バージョンなので、機能するには標準構文に従う必要があります。

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

おすすめ記事