如何打印在具有图案的线之前的线?

时间:2013-10-17 04:58:40

标签: scripting sed awk

我想要打印一条有图案的线条和正好在它之前的线条 例如:说文件是:

This is line 1  
This is line 2  
This is FORMAT line 3  
This is line 4  
This is line 5  
This is FORMAT line 6

说我要搜索的模式是FORMAT。所以输出应该是

This is line 2  
This FORMAT line 3  
This is line 5
This is FORMAT line 6.

我尝试使用sed,我能够打印带有图案的线条而不是前一条线条。

第二个问题(因为不想创建单独的问题)如何在下一行中打印没有特定模式的行? 例如。对于上面的文件和模式,输出应该是

This is line 1    
This is line 4

4 个答案:

答案 0 :(得分:1)

你可以用grep做到这一点。 Grep的B选项之前可以显示n行。

grep -B 1 reg.ex filename

答案 1 :(得分:0)

sed -n '/FORMAT/{H;g;p;};h' filename

答案 2 :(得分:0)

如果你想在awk中真正想要它,你可以做这样的事情:

$ awk '/FORMAT/ { print lastline; print } { lastline = $0 }' < format.txt

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed -n '$!N;/\n.*FORMAT/p;D' file

这一次总是读取2行,如果第二行包含图案则打印它们。