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

SED条件添加行需求:区块内无特定行时插入指定内容

Sed实现:在指定区块的特定行后添加内容(排除含特定关键词的区块)

直接给出可运行的sed命令:

sed -n '
/StartLine/{
    :read_block
    N
    /^$/!b read_block
    /NoNoNo/!s/AlwaysExists/AlwaysExists\nAddMe/
    p
    d
}
p' myfile.ldif

命令解释

  1. -n:关闭sed的默认输出,只输出我们明确指定打印的内容,避免重复输出。
  2. 匹配区块起始行:当遇到StartLine时,进入区块处理逻辑:
    • :read_block:定义循环标签,用于读取整个区块。
    • N:将下一行追加到当前模式空间(把多行合并到一起处理)。
    • /^$/!b read_block:如果当前模式空间末尾不是空行,就跳回read_block标签继续读取,直到把整个区块(包括结尾的分隔空行)都读入模式空间。
    • /NoNoNo/!s/AlwaysExists/AlwaysExists\nAddMe/:检查当前区块是否包含NoNoNo,如果不包含,就把区块里的AlwaysExists替换成AlwaysExists\nAddMe,实现插入新行的效果。
    • p:打印处理后的区块内容。
    • d:清空模式空间,准备处理下一个区块。
  3. p(最后一行):打印非区块起始行的内容(这里主要是区块之间的空行)。

原脚本失效原因

你之前的脚本没有正确分割每个独立区块,而是尝试在全局范围内匹配,导致最终只会在文件末尾执行一次添加操作。上面的命令通过循环读取单个区块到模式空间,确保每个区块都被独立判断和处理,解决了这个问题。

测试效果

用你提供的示例输入运行命令后,输出结果如下:

StartLine
Dummy1
AlwaysExists
NoNoNo
Dummy2

StartLine
Dummy1
AlwaysExists
AddMe
Dummy2

StartLine
Dummy1
AlwaysExists
NoNoNo
Dummy2

StartLine
Dummy1
AlwaysExists
AddMe
Dummy2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:00:59