我正在尝试用单独的文本文件的内容替换文本文件(具有未知数量的子元素的 XML 元素)中的多行。我已经设法让替换主要使用 perl 工作,但它在它替换的字符串之后插入了一个额外的空白行,我想摆脱它。有关显示 perl 命令以及输入和替换文件的代码,请参见下面的代码。
有人知道如何防止出现额外的空行吗?如有必要,我愿意使用除 perl 之外的其他工具。
==> cat test.xml
<root>
<values>
<value>1</value>
<value>2</value>
<value>3</value>
</values>
</root>
==> cat replace.xml
<values>
<value>4</value>
<value>5</value>
</values>
==> perl -i -p0e 's;<values>.*<\/values>;`cat replace.xml`;sge' test.xml
==> cat test.xml
<root>
<values>
<value>4</value>
<value>5</value>
</values>
</root>
==>
在搞砸了一整天之后,我在这里问了这个问题后几乎立刻就明白了......
我能够通过在 perl 命令的搜索条件中包含换行符来修复它。看起来它只是在关闭 xml 标记之后离开已经在行上的换行符,然后从“cat”命令中添加一个额外的换行符。
编辑:感谢 mosvy 的回复,我找到了另一个解决方案,如果要替换的文本没有尾随换行符,就像我的情况一样:
使用 head 而不是 cat 可以防止输出额外的换行符