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

如何用awk/sed实现从匹配模式前一行到空行的文本块打印?

问题:提取指定模式前一行到下一个空行的文本块

需要提取从匹配Processing id: $ID的前一行开始,到下一个空行结束的文本块。现有sed/awk命令仅能从模式行本身开始提取,无法包含模式行的前一行。

输入文件示例

2022/12/28 02:06:29 [Time]
Processing id: PATTERN1
multiple lines follow

2023/01/14 04:06:29 [Time]
Processing id: PATTERN2
multiple lines follow

2023/02/15 08:07:29 [Time]
Processing id: PATTERN3
multiple lines follow

2023/02/16 14:06:29 [Time]
Processing id: PATTERN2
multiple lines follow

当前使用的命令

sed命令

sed -n "/Processing id: $ID/,/^$/p" inputfile

awk命令

awk -v myid="$ID" '$0 ~ "Processing id: "myid,/^$/ {print}' inputfile

改进后的解决方案

方案1:awk实现

核心逻辑是缓存上一行内容,匹配到目标模式时先输出缓存的上一行,再进入打印模式直到遇到空行:

awk -v myid="$ID" '
  /^$/ { in_block=0 }
  in_block { print }
  $0 ~ "Processing id: " myid { print prev; in_block=1 }
  { prev=$0 }
' inputfile

方案2:sed实现

利用sed的保持空间和分支命令,匹配到目标行时回溯打印上一行,再持续打印到空行:

sed -n -e '/Processing id: '"$ID"'/{x;p;x;}' -e '/Processing id: '"$ID"'/,/^$/p' inputfile
  • /Processing id: $ID/{x;p;x;}:匹配目标行时,交换保持空间(存着上一行)和模式空间,打印上一行后再交换回来
  • 后半段命令负责打印从目标行到空行的内容

期望输出

2023/01/14 04:06:29 [Time]
Processing id: PATTERN2
multiple lines follow

2023/02/16 14:06:29 [Time]
Processing id: PATTERN2
multiple lines follow

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:01:57