首页 > 解决方案 > 使用 awk 编辑特定标签下的值

问题描述

我正在尝试理解 AWK 命令。我要解决的问题如下: 我有 XML 文件的结构:

<root>
...
<elem_name name='type1'>
...
<prop name='a' type="xxx" value="000"/>
<prop name='b' type="xxx" value="000"/>
<prop name='c' type="xxx" value="000"/>
...
</elem_name>
<elem_name name='type2'>
....
<prop name='a' type="xxx" value="000"/>
<prop name='b' type="xxx" value="000"/>
<prop name='c' type="xxx" value="000"/>
...
</elem_name>
...
</root>

而且我必须在“type1”根目录下编辑道具“b”的值。正如我提到的,我想用 awk 或 sed 来做。我知道更好的工具可以做到这一点。

现在,我创建了以下命令,但它无法正常工作。

gawk '/elem_name name="type1"/ {for(i=1; i<=4; i++) {getline;found=index($0,"a");if(found != 0){sub("value=", "test", $0)}; print > "test.xml"}} {print > "test.xml"    }' original_file.xml

首先,脚本执行后值没有改变,'name="type1" 从输出文件中删除。

标签: xmlawksededit

解决方案


我必须在“type1”根目录下编辑道具“b”的值

由于我假设您正在运行的操作系统中有 python,因此我分享了以下解决方案。

import xml.etree.ElementTree as ET

FILE_NAME = 'myxml.xml'

root = ET.parse(FILE_NAME)
ele = root.find(".//elem_name[@name='type1']")
b = ele.find(".//prop[@name='b']")
b.attrib['value'] = 'new_value_goes_here'
root.write(FILE_NAME)

推荐阅读