我的输入文件如下所示:
[1234]
text
text
text
[3456]
text
text
text
[7458]
text
text
text
我想删除模式之间的所有行,包括FROM_HERE和排除TO_HERE。
sed '/FROM_HERE/,/TO_HERE/{//p;d;}'
现在我有:
sed '/^\['"3456"'\]/,/^\[.*\]/{//p;d;}'
但是此命令也不会删除FROM_HERE行。对于最后的3456,输入文件应如下所示:
[1234]
text
text
text
[7458]
text
text
text
我怎样才能做到这一点?感谢。
答案 0 :(得分:1)
您可以删除模式中的行到下一个空行:
sed '/^\['"3456"'\]/,/^$/{d;}' file
答案 1 :(得分:0)
注意:为了示例,我将仅匹配3456和7458(而不是"完全[3456]")
您可以执行以下操作:
~$ cat t
[1234]
text1
text1
text1
[3456]
text2
text2
text2
[7458]
text3
text3
text3
~$ sed '/3456/,/7458/{/7458/!d}' t
[1234]
text1
text1
text1
[7458]
text3
text3
text3
即:在FROM_HERE和TO_HERE之间(/3456/,/7458/
)执行以下操作:如果不匹配TO_HERE({/7458/!d}
),则删除
答案 2 :(得分:0)
要删除从模式[3456]
开始直到遇到模式[7458]
(不包括带有结束模式的行)的行,请使用以下命令:
sed '/^\[3456\]/,/\[7458\]/{/\[7458\]/b;d;}' testfile
此处 /\[7458\]/b
- b
命令用于跳过包含模式\[7458\]
d
命令是删除一行
输出:
[1234]
text
text
text
[7458]
text
text
text
https://www.gnu.org/software/sed/manual/sed.html#Branching-and-flow-control