我使用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
答案 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