Perl
為什麼我的多行 perl 字元串替換添加了一個空行?
我正在嘗試用單獨的文本文件的內容替換文本文件(具有未知數量的子元素的 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”命令中添加一個額外的換行符。
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 可以防止輸出額外的換行符