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
4

4 回答 4

1

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

grep -B 1 reg.ex filename
于 2013-10-17T05:02:12.643 回答
0
sed -n '/FORMAT/{H;g;p;};h' filename
于 2013-10-17T05:09:40.923 回答
0

如果你真的想在 awk 中使用它,你可以这样做:

$ awk '/FORMAT/ { print lastline; print } { lastline = $0 }' < format.txt
于 2013-10-17T05:11:41.653 回答
0

这可能对您有用(GNU sed):

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

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

于 2013-10-17T07:47:53.743 回答