将多行字符串插入另一个字符串

将多行字符串插入另一个字符串

我需要将行插入到 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,但无论哪种方式都可以。

相关内容