2013-10-17 137 views
0

我想打印一条有图案的线条和它之前的线条。
例如:说该文件是:如何打印具有图案的线条之前的线条?

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 

回答

1

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

grep -B 1 reg.ex filename 
+0

它将打印1行以下还是以上或两者。 – user1660982

+0

-C选项将在上面和下面打印。 -A选项将在比赛结束后打印。 -B选项将在比赛前打印。 – Shobit

+0

谢谢,我认为它会做。 – user1660982

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

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

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

或'{print lastline RS $ 0}'' – Jotne

0

这可能会为你工作(GNU SED):

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

这总是一次读取2行,如果第二行包含该模式,则会将它们打印出来。

相关问题