如何使用Sed在指定块后的首个空行处插入新空行?
没问题,我来帮你搞定这个sed的需求!你之前用sed '/Additional categories/a new'在匹配行后直接插入内容的方法很实用,现在要实现的是找到Additional categories对应的块之后的第一个空行,再插入一个空行对吧?
解决方案命令
直接用这条sed命令就能实现:
sed '/Additional categories/{:a;N;/\n$/!ba;s/\n$/\n\n/}' your_file.txt
命令逐段解释
我拆开来给你讲清楚每部分的作用:
/Additional categories/:定位到以Additional categories开头的行,触发后续的多行处理逻辑:a:定义一个名为a的标签,用来做循环跳转的标记N:把下一行内容读取到当前的模式空间里,这样我们就能逐行往后查找目标空行/\n$/!ba:检查模式空间的末尾是不是纯空行(\n$代表最后一行是空行),如果不是,就跳回标签a继续读取下一行,直到找到第一个空行s/\n$/\n\n/:当找到第一个空行后,把原来的单个换行(对应空行)替换成两个换行,相当于在这个位置插入了一个新的空行
示例验证
拿你给出的文件内容测试:
Additional categories
stuff A
stuff B
other stuff
other stuffAdditional categories
stuff A
stuff B
stuff C
stuff D
other stuff
other stuff
执行命令后,结果会变成:
Additional categories
stuff A
stuff B
other stuff
other stuffAdditional categories
stuff A
stuff B
stuff C
stuff D
other stuff
other stuff
正好符合你要在首个空行位置插入空行的预期。
扩展:兼容含空白字符的“空行”
如果你的文件里的“空行”可能包含空格或制表符(不是纯空),可以把命令调整为下面这样,能匹配这类非纯空的空行:
sed '/Additional categories/{:a;N;/\n[[:space:]]*$/!ba;s/\n[[:space:]]*$/\n\n/}' your_file.txt
内容的提问来源于stack exchange,提问作者985ranch
相关产品推荐
相关产品推荐

