XMLSlartlet Grep xml 节点并替换
XMLSlartlet Grep xml node and replace
如何使用 xmlstarlet
查找节点块并替换为自定义块
下面是我的 xml 示例:
<?xml version="1.0" encoding="UTF-8"?>
<job>
<input>
<par_denominator nil="true"/>
<par_follow_source>true</par_follow_source>
<par_numerator nil="true"/>
<deblock_enable>Auto</deblock_enable>
<deblock_strength>0</deblock_strength>
<no_psi>false</no_psi>
</input>
<h264_settings>
<par_denominator nil="true"/>
<par_follow_source>true</par_follow_source>
<par_numerator nil="true"/>
</h264_settings>
</job>
我想替换所有块包含
<par_denominator nil="true"/>
<par_follow_source>true</par_follow_source>
<par_numerator nil="true"/>
重置价值
<par_denominator>1</par_denominator>
<par_follow_source>false</par_follow_source>
<par_numerator>1</par_numerator>
xmlstarlet
解法:
xmlstarlet ed -u '//*["par_denominator" or "par_numerator"][@nil="true"]' -v 1 \
-u '//par_follow_source[.="true"]' -v 'false' \
-d '//*["par_denominator" or "par_numerator"]/@nil' input.xml
输出:
<?xml version="1.0" encoding="UTF-8"?>
<job>
<input>
<par_denominator>1</par_denominator>
<par_follow_source>false</par_follow_source>
<par_numerator>1</par_numerator>
<deblock_enable>Auto</deblock_enable>
<deblock_strength>0</deblock_strength>
<no_psi>false</no_psi>
</input>
<h264_settings>
<par_denominator>1</par_denominator>
<par_follow_source>false</par_follow_source>
<par_numerator>1</par_numerator>
</h264_settings>
</job>
如何使用 xmlstarlet
查找节点块并替换为自定义块下面是我的 xml 示例:
<?xml version="1.0" encoding="UTF-8"?>
<job>
<input>
<par_denominator nil="true"/>
<par_follow_source>true</par_follow_source>
<par_numerator nil="true"/>
<deblock_enable>Auto</deblock_enable>
<deblock_strength>0</deblock_strength>
<no_psi>false</no_psi>
</input>
<h264_settings>
<par_denominator nil="true"/>
<par_follow_source>true</par_follow_source>
<par_numerator nil="true"/>
</h264_settings>
</job>
我想替换所有块包含
<par_denominator nil="true"/>
<par_follow_source>true</par_follow_source>
<par_numerator nil="true"/>
重置价值
<par_denominator>1</par_denominator>
<par_follow_source>false</par_follow_source>
<par_numerator>1</par_numerator>
xmlstarlet
解法:
xmlstarlet ed -u '//*["par_denominator" or "par_numerator"][@nil="true"]' -v 1 \
-u '//par_follow_source[.="true"]' -v 'false' \
-d '//*["par_denominator" or "par_numerator"]/@nil' input.xml
输出:
<?xml version="1.0" encoding="UTF-8"?>
<job>
<input>
<par_denominator>1</par_denominator>
<par_follow_source>false</par_follow_source>
<par_numerator>1</par_numerator>
<deblock_enable>Auto</deblock_enable>
<deblock_strength>0</deblock_strength>
<no_psi>false</no_psi>
</input>
<h264_settings>
<par_denominator>1</par_denominator>
<par_follow_source>false</par_follow_source>
<par_numerator>1</par_numerator>
</h264_settings>
</job>