Design patterns sed删除两个模式之间的行,而不删除第二个模式,包括第一个模式

Design patterns sed删除两个模式之间的行,而不删除第二个模式,包括第一个模式,design-patterns,sed,Design Patterns,Sed,我的输入文件如下所示: [1234] text text text [3456] text text text [7458] text text text 我想删除模式之间的所有行,包括这里的FROM_和这里的exclude to_ sed '/FROM_HERE/,/TO_HERE/{//p;d;}' 现在我有: sed '/^\['"3456"'\]/,/^\[.*\]/{//p;d;}' 但此命令也不会删除_中的行。对于末尾的3456,输入文件应如下所示: [1234] t

我的输入文件如下所示:

[1234]
text 
text
text

[3456]
text 
text
text

[7458]
text 
text
text
我想删除模式之间的所有行,包括这里的FROM_和这里的exclude to_

sed '/FROM_HERE/,/TO_HERE/{//p;d;}'
现在我有:

sed '/^\['"3456"'\]/,/^\[.*\]/{//p;d;}'
但此命令也不会删除_中的行。对于末尾的3456,输入文件应如下所示:

[1234]
text 
text
text

[7458]
text 
text
text

我怎样才能做到这一点?谢谢。

注意:为了这个例子,我只匹配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/之间,执行以下操作:如果与{/7458/!d}不匹配,则删除

注意:为了示例,我将只匹配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/之间,执行以下操作:如果与{/7458/!d}不匹配,则删除

您可以将图案中的行删除到下一个空行:

sed '/^\['"3456"'\]/,/^$/{d;}' file

您可以将图案中的线条删除到下一个空行:

sed '/^\['"3456"'\]/,/^$/{d;}' file

要删除从模式[3456]开始的行,直到遇到模式[7458],不包括具有结束模式的行,请使用以下命令:

sed '/^\[3456\]/,/\[7458\]/{/\[7458\]/b;d;}' testfile
/\[7458\]/b-b命令用于跳过包含模式\[7458\]的行

d命令是删除一行 输出:

[1234]
text 
text
text

[7458]
text 
text
text

要删除从模式[3456]开始的行,直到遇到模式[7458],不包括具有结束模式的行,请使用以下命令:

sed '/^\[3456\]/,/\[7458\]/{/\[7458\]/b;d;}' testfile
/\[7458\]/b-b命令用于跳过包含模式\[7458\]的行

d命令是删除一行 输出:

[1234]
text 
text
text

[7458]
text 
text
text

删除[3456]中的所有行,包括[7458]?不,不删除。我已经更新了我的问题可能重复删除[3456]中所有行的可能重复,包括[7458]?不,没有。我已经更新了我的问题可能重复的可能重复的