如何忽略两种模式之间的线条

时间:2018-01-25 15:53:29

标签: bash sed

我使用03:52:42打印从一个模式开始的所有行:

让我们说sed内容如下:

file1

命令:

outside-text1
==START
inner-text1
==END
outside-text2
==START
inner-text2
==END

将打印:

sed -n '/==START/,/==END/p' file1

在我的情况下,我想打印:

==START
inner-text1
==END
==START
inner-text2
==END

3 个答案:

答案 0 :(得分:2)

使用!取消匹配。

$ sed -n '/==START/,/==END/!p' file1
outside-text1
outside-text2

答案 1 :(得分:2)

或者更简单,只需使用d(删除)功能从开始到结束模式中删除:

$ sed '/==START/,/==END/d' file.txt
outside-text1
outside-text2

它只是一种更清晰的替代方案,可以抑制图案空间的打印并消除打印效果。

答案 2 :(得分:1)

关注awk可能对您有帮助。

awk '/^==END/{flag="";next} /^==START/{flag=1;next} !flag'   Input_file

OR

awk '/^==START/{flag=1;} /^==END/{flag="";next} !flag'  Input_file

OR

awk '/^==START/{flag=1} !flag;  /^==END/{flag=""}'  Input_file

输出如下。

outside-text1
outside-text2

解决方案第二: 关注sed也可能对您有所帮助。

sed  '/==START/,/==END/d'  Input_file