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]?不,没有。我已经更新了我的问题可能重复的可能重复的