xml - 查找字符串并替换为换行符和缩进

标签 xml linux bash shell replace

我想在文件中找到一个特定的字符串并像下面这样替换它:

在文件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/

相关文章:

linux - GNU 并行 : execute one command parallel for all files in a folder

linux - 与 yuvj420p 等效的未知 V4L2 像素格式

c++ - 在 Qt 中解析 XML

linux - 我如何真正 grep 3xa Linux?

c# - 将 'Which branch?' 字段添加到 TFS 中的工作项

linux - 绑定(bind)具有相同 key 代码的 key ,不会丢失第二个 key

linux - 自定义 bash 通配符扩展

linux - wget redownload 从开始未完成的文件下载并继续下载剩余的文件

xml - 使用 simplexml_load_file 解析 XML 文件返回空对象

java - Java读取xml文件内容的方法