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
어느 쪽이든 괜찮습니다.