我试图用单独的文本文件的内容替换文本文件(具有未知数目的子代的XML元素)中的多行。我已经设法使用perl进行替换,但大多数情况下都可以使用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”命令中添加了另一个。
perl -i -p0e 's;<values>.*<\/values>\n;`cat replace.xml`;sge' test.xml
编辑:感谢mosvy的响应,我找到了另一个解决方案,如果要替换的文本没有尾随换行符,那么该解决方案将起作用:
perl -i -p0e 's;<values>.*<\/values>;`head -c -1 replace.xml`;sge' test.xml
使用head而不是cat防止输出额外的换行符
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句