我想在文件中找到一个特定的字符串并像下面这样替换它:
在文件test*.xml中
<root>
<list>
<item ID="abc">
<amount>1</amount>
<text>TEST</text>
</item>
<item ID="cde">
<amount>1</amount>
<text>TEST 2</text>
</item>
</list>
</root>
替换为
<root>
<list>
<item ID="abc">
<amount>0</amount>
<text>TEST</text>
</item>
<item ID="cde">
<amount>1</amount>
<text>TEST 2</text>
</item>
</list>
</root>
到目前为止我有这个:
find . -name "test*" -print | xargs sed -i 's/<item ID=\"abc\">/<item ID=\"abc\">/g'
好吧,它当然什么都不做,但我不知道如何“跳过”换行符和空格。我不允许更改缩进。 我试着用一行代码来完成它,但一个小的 bash 脚本也应该可以做到这一点,但我对 bash 非常缺乏经验。
最佳答案
我宁愿使用 XML 感知工具来操作 XML,这样您就可以保持格式正确、字符/实体编码等。
XMLStarlet效果很好。它将允许您使用 XPath 指定 XML 中的特定节点并更改这些节点。我认为您真的不必担心缩进等问题。这通常只被视为格式化。
关于xml - 查找字符串并替换为换行符和缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13989067/