我需要将行插入到 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'
是一个克什(也支持巴什和桀骜) 方法来制作换行符,因此如果您使用另一个 shell,请根据需要进行调整。
sed "s|\(</tags>\)|${multiline_string//$'\n'/\n}\1|g"
尾随g
是为了满足您的情况可能在一行上发生</tags>
多次。似乎您的 不需要它xml
,但无论哪种方式都可以。