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. 그 중 하나는 {및 사이의 동일한 줄에 여러 명령을 허용하는 것입니다 }. 확장 기능을 사용해도 다른 sed 구현에서는 작동이 보장되지 않습니다.

비지박스 sed는 최소 버전이므로 작동하려면 표준 구문을 사용해야 합니다.

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

관련 정보