【发布时间】:2014-03-18 11:19:04
【问题描述】:
如何在模式匹配前输入 4 个空白行?
我可以的
sed '/patterntosearch4/G' 1.txt > 2.txt
创建一个新文件 (2.txt),在每个模式之后有一个空行。
但是如何在匹配前输入 4 个空行呢?
Manpage SED 似乎没有提供任何答案。
非常感谢任何帮助!
【问题讨论】:
-
带有反向引用的正则表达式。
如何在模式匹配前输入 4 个空白行?
我可以的
sed '/patterntosearch4/G' 1.txt > 2.txt
创建一个新文件 (2.txt),在每个模式之后有一个空行。
但是如何在匹配前输入 4 个空行呢?
Manpage SED 似乎没有提供任何答案。
非常感谢任何帮助!
【问题讨论】:
这可能对你有用(GNU sed):
sed '/patterntosearch4/i\\n\n\n' file
或者如果您愿意:
sed -e '/patterntosearch4/!b' -e 'G' -e 's/\(.*\)\(.\)/\2\2\2\2\1/' file
顺便说一句,当您使用 G 命令时,它会在模式匹配的行之后插入一个换行符,我猜您想在模式匹配的行之前插入一个换行符。
【讨论】:
在著名的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
【讨论】:
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
【讨论】:
使用 gnu-sed 你可以做到:
sed -i.bak 's/pattern/\n\n\n\n&/' file
【讨论】:
还有很多方法,但这里有一个非常简单的方法:
sed 's/patterntosearch4/\n\n\n\n&/' 1.txt > 2.txt
【讨论】: