编写Shell脚本提取XML中SOUNDCHEK标签下的InFrame数据
提取XML中下数据的Shell脚本方案
针对你的需求,这里有几种实用的Shell脚本方案来提取<SOUNDCHEK>标签下的<InFrame>数据,优先推荐用标准XML工具来避免文本处理的兼容性问题:
方案1:使用xmllint(推荐,标准XML解析工具)
xmllint是libxml2工具集的一部分,绝大多数Linux发行版默认预装,支持XPath查询,是处理XML的可靠选择。
脚本示例
#!/bin/bash # 替换为你的XML文件路径 xml_file="input.xml" # 通过XPath定位目标节点,提取文本并格式化输出 xmllint --xpath '//SOUNDCHEK/InFrame/text()' "$xml_file" | tr '\n' ' ' | sed 's/ $//'
代码解释
//SOUNDCHEK/InFrame/text():XPath表达式,精准匹配所有<SOUNDCHEK>节点下的<InFrame>节点的文本内容tr '\n' ' ':将每个结果的换行符替换为空格,合并为一行sed 's/ $//':移除末尾多余的空格,保证输出格式整洁
运行后会得到你期望的输出:2 4 7
方案2:使用awk(适合固定简单XML结构)
如果你的XML结构完全固定(标签无换行、无额外属性),可以用awk快速处理,但这种方法对XML格式变化的适应性很差,仅适合临时场景。
脚本示例
#!/bin/bash xml_file="input.xml" awk -F'</?InFrame>' '/<SOUNDCHEK>/{in_sound=1} in_sound && /<InFrame>/{print $2} /<\/SOUNDCHEK>/{in_sound=0}' "$xml_file" | tr '\n' ' ' | sed 's/ $//'
代码解释
-F'</?InFrame>':将<InFrame>和</InFrame>作为字段分隔符/<SOUNDCHEK>/{in_sound=1}:遇到<SOUNDCHEK>标签时,标记进入目标节点范围in_sound && /<InFrame>/{print $2}:在目标节点范围内,提取<InFrame>标签包裹的内容/<\/SOUNDCHEK>/{in_sound=0}:遇到</SOUNDCHEK>标签时,退出目标节点范围- 后续的
tr和sed同样用于格式化输出为空格分隔的字符串
内容的提问来源于stack exchange,提问作者ScriptWriter
相关产品推荐
相关产品推荐

