如何使用sed在---行后无空行时仅插入单个空白行
sed 匹配行后按需插入单个空白行实现方案
原有命令错误原因
之前的命令运行不符合预期,核心是两个问题:
- sed的
i(插入)命令输出插入内容时会自动追加换行符,手动添加\n或\\n会额外多生成换行,导致插入2个空白行 - 命令中冗余的分支跳转、末尾的
q指令会截断文件后续内容,无法完整输出全部文本
可直接运行的正确命令
GNU sed 版本(Linux 环境默认)
sed -E '/^---/{n;/^\s*$/!i\' inserting_one.txt
跨版本兼容写法(适配 GNU sed / BSD sed,macOS 环境可用)
sed -E '/^---/{n;/^[[:space:]]*$/!i\ ' inserting_one.txt
执行逻辑说明
- 匹配所有以
---开头的行 - 读取匹配行的下一行到模式空间,同时正常输出当前匹配到的
---行 - 校验读取到的下一行:
- 如果该行是空白行(由0或多个空格、制表符等空白字符组成),跳过插入逻辑,继续正常输出后续内容
- 如果该行不是空白行,执行插入操作:
i\后不追加任何内容,依靠i命令自动追加的换行符生成1个空白行,不会出现多插空行的问题
- 所有不匹配规则的行都按原内容输出,不改动原有文本结构
效果校验
当输入内容为:
--- n WORKING_DIR
命令输出为预期效果:
--- WORKING_DIR
当---后已经存在空白行时,命令不会重复插入空行,保持原有内容不变。
内容的提问来源于stack exchange,提问作者user17227456
相关产品推荐
相关产品推荐

