如何在Bash脚本中根据resource-id提取XML节点的text值
Bash提取指定resource-id的XML节点文本值
针对无结构文本形式的XML文件,要提取resource-id为com.zhiliaoapp.musically:id/hzk的节点对应的text内容,可通过以下几种文本处理工具组合实现:
方法1:grep + sed 组合命令
适用于resource-id行和text行不在同一行的场景:
grep -A5 "com.zhiliaoapp.musically:id/hzk" your_file.xml | grep -oP '(?<=text=")[^"]+'
-A5:匹配到目标resource-id的行后,额外输出后续5行(可根据实际XML节点的换行情况调整数字,确保覆盖到包含text属性的行)-oP:启用Perl正则语法,仅输出匹配到的目标内容(?<=text=")[^"]+:通过正向预查,精准提取text="后到下一个双引号之间的文本内容
方法2:sed 单命令匹配
适用于resource-id和text属性在同一行的场景:
sed -n 's/.*resource-id="com.zhiliaoapp.musically:id\/hzk".*text="\([^"]*\)".*/\1/p' your_file.xml
-n:仅输出匹配成功的行- 正则表达式会匹配包含目标resource-id的整行,捕获text属性的取值并输出
额外说明
- 如果XML节点格式有变动(比如属性顺序、换行位置不同),需调整正则表达式或grep的
-A参数行数 - 若存在多个匹配节点,上述命令会输出所有结果;只需第一个匹配值的话,可追加
| head -n1
内容的提问来源于stack exchange,提问作者Vincenr
相关产品推荐
相关产品推荐

