如何在与SED进行模式匹配之前插入4个换行符?

时间:2014-02-18 15:32:16

标签: macos shell sed terminal

如何在模式匹配前输入4个空白行?

我能做到

sed '/patterntosearch4/G' 1.txt > 2.txt 

创建一个新文件(2.txt),每个模式后面都有一个空行。

但是如何在比赛前输入4个空行?

Manpage SED似乎没有提供任何答案。

非常感谢任何帮助!!

5 个答案:

答案 0 :(得分:5)

这可能适合你(GNU sed):

sed '/patterntosearch4/i\\n\n\n' file

或者如果您愿意:

sed -e '/patterntosearch4/!b' -e 'G' -e 's/\(.*\)\(.\)/\2\2\2\2\1/' file

BTW当你使用G命令,它在模式匹配的行后面插入换行符时,我猜你想在模式匹配的行之前插入换行符。

答案 1 :(得分:5)

在着名的sed单行博客(http://www.catonmat.net/blog/wp-content/uploads/2008/09/sed1line.txt

# insert a blank line above every line which matches "regex"
 sed '/regex/{x;p;x;}'

所以在你的情况下,

sed '/atterntosearch4/{x;p;p;p;p;x}' file

sed '/atterntosearch4/{x;P;P;P;P;x}' file

答案 2 :(得分:3)

sed的替代方案,没有替换(s/../../):

sed '/pat/{x;p;p;p;p;x}'

试验:

kent$ (master|✔) seq 5|sed '/3/{x;p;p;p;p;x}'      
1
2




3
4
5

答案 3 :(得分:1)

使用gnu-sed你可以这样做:

sed -i.bak 's/pattern/\n\n\n\n&/' file

答案 4 :(得分:0)

还有很多方法,但在这里你有一个非常简单的方法:

sed 's/patterntosearch4/\n\n\n\n&/' 1.txt > 2.txt