如何用Shell脚本按条件从文件中提取指定值
需求与解决方案
需求说明
- 读取
myfile.txt文件,仅当条目同时满足"status":"ERROR"和"metricKey":"new_coverage"时,将对应的"actualValue"值写入newfile.txt - 若不存在符合条件的条目,
newfile.txt需保持为空
原脚本问题
你之前尝试的sed脚本存在局限性:
sed -n 's/.*"status":"ERROR".*"metricKey":"new_coverage".*"actualValue":"\([^"]*\)".*/\1/p' myfile.txt > newfile.txt
该脚本强制要求status:ERROR的内容必须出现在metricKey:new_coverage之前,一旦两个条件在该行中的顺序调换,就会匹配失败,无法精准过滤同时满足两个条件的行。
修正后的sed脚本
sed -n '/"status":"ERROR"/ { /"metricKey":"new_coverage"/ { s/.*"actualValue":"\([^"]*\)".*/\1/p } }' myfile.txt > newfile.txt
脚本解释
- 第一层匹配:先筛选出包含
"status":"ERROR"的行 - 第二层匹配:在上述行中,进一步筛选出包含
"metricKey":"new_coverage"的行,确保两个条件同时满足(且不限制条件在该行中的顺序) - 提取值:对最终符合条件的行,通过正则提取
actualValue对应的内容并打印输出 - 若没有符合条件的行,sed不会输出任何内容,
newfile.txt自然保持为空
内容的提问来源于stack exchange,提问作者Zero5
相关产品推荐
相关产品推荐

