如何修改sed命令,在指定匹配行后/前添加换行符?
问题与解决方案
一、在DO-NOT-TOUCH-BEGIN行后添加空行
原命令用于输出从第一行到包含DO-NOT-TOUCH-BEGIN的所有行:
sed -ne '1,/DO-NOT-TOUCH-BEGIN/p' filename.txt
修改后的命令可在目标行后追加空行:
sed -ne '1,/DO-NOT-TOUCH-BEGIN/{p; /DO-NOT-TOUCH-BEGIN/a\\}' filename.txt
原理说明
- 用
{}将范围1,/DO-NOT-TOUCH-BEGIN内的操作分组,确保仅对该范围内的行执行后续逻辑 p:正常打印当前行/DO-NOT-TOUCH-BEGIN/a\\:匹配到目标行时,通过sed的a命令追加一个空行(a后接\\代表空行)
示例
输入内容:
hello there DO-NOT-TOUCH-BEGIN not this DO-NOT-TOUCH-END extra lines
执行命令后输出:
hello there DO-NOT-TOUCH-BEGIN
二、在DO-NOT-TOUCH-END行前添加空行
原命令用于输出从包含DO-NOT-TOUCH-END的行到文件末尾的所有行:
sed -ne '/DO-NOT-TOUCH-END/,$p' filename.txt
修改后的命令可在目标行前插入空行:
sed -ne '/DO-NOT-TOUCH-END/{i\\}; /DO-NOT-TOUCH-END/,$p' filename.txt
原理说明
/DO-NOT-TOUCH-END/{i\\}:匹配到目标行时,通过sed的i命令在当前行前插入一个空行(i后接\\代表空行)- 保留原有的
/DO-NOT-TOUCH-END/,$p逻辑,确保输出从目标行到末尾的内容
示例
输入内容同上,执行命令后输出:
DO-NOT-TOUCH-END extra lines
内容的提问来源于stack exchange,提问作者lord_nimon
相关产品推荐
相关产品推荐

