如何用Shell Script提取HTML中</em>与</a>间的数值?
用Shell脚本提取指定标签间数值的方法
针对你提供的HTML片段,以下几种Shell工具组合可以提取</em>和</a>之间的数值4,519:
方法1:使用sed命令
sed适合处理行内文本的替换与提取,通过正则匹配目标区间:
echo "id='idusedMemory' alt='graph'/></em>4,519</a> Mb / 64,309 Mb </td><td>" | sed -n 's/.*<\/em>\(.*\)<\/a>.*/\1/p'
解释:
-n:仅输出匹配到的行s/.*<\/em>\(.*\)<\/a>.*/\1/p:用正则匹配整行内容,捕获</em>和</a>之间的部分(\(.*\)为捕获组),最终替换为捕获到的内容并打印
方法2:使用grep(支持Perl正则)
如果你的grep支持-P参数(多数GNU grep版本都支持),可以用预查语法精准定位:
echo "id='idusedMemory' alt='graph'/></em>4,519</a> Mb / 64,309 Mb </td><td>" | grep -Po '(?<=<\/em>).*(?=<\/a>)'
解释:
-P:启用Perl兼容正则表达式-o:仅输出匹配到的内容片段(?<=<\/em>):正向预查,定位到</em>之后的位置(?=<\/a>):反向预查,定位到</a>之前的位置- 中间的
.*即为要提取的数值内容
方法3:使用awk分割字符串
通过awk的字段分割功能,分步截取目标内容:
echo "id='idusedMemory' alt='graph'/></em>4,519</a> Mb / 64,309 Mb </td><td>" | awk -F'</em>' '{print $2}' | awk -F'</a>' '{print $1}'
解释:
- 第一个
awk以</em>为分隔符,取分割后的第二个字段(即</em>之后的所有内容) - 第二个
awk以</a>为分隔符,取分割后的第一个字段(即</a>之前的数值)
注意事项
- 若HTML内容来自文件,将
echo "..."替换为cat your_html_file.html即可 - 如果HTML存在换行,需先用
tr -d '\n'将多行合并为一行再处理,避免匹配失败
内容的提问来源于stack exchange,提问作者ROB ENGG
相关产品推荐
相关产品推荐

