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

使用awk仅在指定标记行后搜索字符串并输出匹配行及前一行

awk实现指定区域后搜索匹配行及前一行的方案

需求梳理

  • 搜索触发条件:仅在文件中出现start real work行之后的内容中执行搜索
  • 匹配规则:命中包含records字符串,且不是以0 records开头的行
  • 输出要求:匹配命中时,同时输出匹配行的前一行、匹配行本身

实现命令

调整后的awk单行命令如下:

awk '/start real work/{f=1} f&&/records/&&!/^0 records/{for(i=1;i<=x;)print a[i++];print} {for(i=1;i<x;i++)a[i]=a[i+1];a[x]=$0}' x=1 x.x

命令说明

  • 新增标志位f,默认值为0,当匹配到start real work行时将f置为1
  • 所有匹配规则新增f判断,只有f=1(即已过触发行)时才会执行匹配逻辑
  • 原有缓存前一行的逻辑保持不变,x=1代表缓存1行前的内容,若需要输出更多前导行可调整x的数值

效果验证

首先执行示例文件创建命令:

cat << EOF > x.x
start job
initialization
20 records

start real work


first step
30 records

# comments
second step
0 records

#comments
third step
22 records

end
EOF

运行上述awk命令后,输出结果完全符合预期:

first step
30 records
third step
22 records

内容的提问来源于stack exchange,提问作者Jacques Kilchoer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:18:00