You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:05:20