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

如何编写Sed脚本注释多行标记A\nB与U\nV之间的行?

Sed脚本编写需求

我有一个名为test的文件,内容如下:

X
X

B

A
B

X
X
X

U

U
V

X
X

需要将该文件编辑为如下输出结果:

X
X

B

A
B

# X
# X
# X

# U

U
V

X
X

尝试过以下命令但无法满足需求:

cat test | sed -E '1,/B/!{/U/,$!s/.+/# &/}'

原因是该命令会从第一个B开始匹配并注释后续内容,但实际需要从多行标记A\nB之后开始处理。

解决方案

使用Sed的多行处理功能,先精准匹配A\nB这个多行起始标记,再对后续指定范围的行添加注释前缀:

sed -E '
# 匹配单独的"A"行,读取下一行检查是否是"B"
/^A$/{
    N
    /\nB$/{
        # 打印"A"和"B"这两行,保留原有内容
        P
        D
        # 进入注释处理循环
        :comment_mode
        n
        # 遇到单独的"U"行时,注释该行后切换到正常输出模式
        /^U$/{
            s/^/# /
            p
            :normal_mode
            n
            p
            b normal_mode
        }
        # 空行直接输出,不添加注释
        /^$/b print_line
        # 非空行添加注释前缀
        s/^/# /
        :print_line
        p
        b comment_mode
    }
}
' test

脚本逻辑说明

  1. 先定位到单独的A行,读取下一行确认是B,以此确定注释起始点;
  2. 进入注释模式后,对后续每行进行判断:
    • 若遇到单独的U行,注释该行后切换到正常输出模式,不再处理后续行;
    • 空行直接输出,不添加注释;
    • 其他非空行添加# 前缀后输出;
  3. 正常输出模式下,后续所有内容直接原样输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 23:22:46