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

如何用Shell脚本提取前后均为空行的行?

提取前后均为空行的行

针对你的需求,以下是用awk和sed实现的两种方案:

awk 方案

awk '
    { lines[NR%3] = $0 }
    NR >= 3 && lines[(NR-2)%3] == "" && lines[(NR-1)%3] != "" && lines[NR%3] == "" {
        print lines[(NR-1)%3]
    }
' your_file.txt

原理

  • 用数组lines循环存储最近的3行内容,通过NR%3实现循环覆盖,避免数组无限增长。
  • 当处理到第3行及以后时,检查三个条件:
    1. 前前一行(lines[(NR-2)%3])是空行
    2. 前一行(lines[(NR-1)%3])是非空行
    3. 当前行(lines[NR%3])是空行
  • 满足条件时,打印中间的非空行,也就是前后都被空行包围的目标行。

sed 方案

sed -n '
    /^$/{
        n
        /^$/!{
            h
            n
            /^$/{
                x
                p
            }
        }
    }
' your_file.txt

原理

  • -n 参数关闭sed默认的每行打印行为,只输出我们指定的内容。
  • 匹配到空行时:
    1. 用n读取下一行,如果该行不是空行,就把它存入保持空间(h)。
    2. 再用n读取下一行,如果该行是空行,就交换保持空间和模式空间(x),然后打印(p)。
  • 这个逻辑精准匹配了「空行 → 非空行 → 空行」的模式,输出中间的非空行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:00:52