여러 줄 문자열을 다른 문자열에 삽입

여러 줄 문자열을 다른 문자열에 삽입

XML 파일에 줄을 삽입해야 합니다.

끼워 넣다

  <one>
  </one>

입력하다

<tags>
</tags>

얻다

<tags>
  <one>
  </one>
</tags>

나는 이것을 시도했습니다 :

sed "s#\\(< /tags>\\)#${multiline_string}\1#"

그러나 들여쓰기가 손실됩니다.

답변1

Mat이 말했듯이 들여쓰기(및 일반적으로 공백)는 XML 파일에서 중요하지 않습니다. 이것:

<one><tags></tags></one>

다음과 정확히 동일합니다.

<one>
 <tags>
 </tags>
</one>

그러나 이것은 들여쓰기를 유지하면서 작동합니다.

$ cat myfile.xml
<tags>
</tags>
$ sed '/<one>/ a\
  <tags>\
  </tags>
' myfile.xml > newfile.xml
$ cat newfile.xml
<one>
  <tags>
  </tags>
</one>

...하지만 XML로 작업하는 경우 실제로 XML을 구문 분석하고 프로그래밍 방식으로 트리를 조작할 수 있는 고급 언어 사용을 고려할 수 있습니다.

답변2

다음은 질문에 표시된 코드를 수정한 것입니다.

이는$'\n'케시(또한 지원세게 때리다그리고다루기 힘든) 방법을 사용하여 줄 바꿈을 수행하므로 다른 셸을 사용하는 경우 필요에 따라 조정하세요.

sed "s|\(</tags>\)|${multiline_string//$'\n'/\n}\1|g"

후행은 g귀하의 경우에 적합합니다.가능한한 줄에서 여러 번 발생합니다 </tags>. 귀하의 경우에는 필요하지 않은 것 같지만 xml어느 쪽이든 괜찮습니다.

관련 정보