2010-08-16 138 views
1

我有一个目录中的文件集合,我想要搜索特定的正则表达式(=([14-9]|[23][0-9]),因为它发生)。但是我只关心这种模式是在第二,第六,第十,......,第4n + 2行。只涂抹某些行文件

有没有很好的方法来做到这一点?

回答

1

你应该让它通过awk首先摆脱不必要线(和可选穿上行号,这样你仍然可以说出真正的线是什么):

pax> echo 'L1 
...> L2 
...> L3 
...> L4 
...> L5 
...> L6 
...> L7 
...> L8 
...> L9 
...> L10 
...> L11 
...> L12' | awk '{if ((FNR % 4)==2) {print FNR":"$0}}' 
2:L2 
6:L6 
10:L10 

(如果您不关心行号,只需使用'{if ((FNR % 4)==2) {print}}')。所以像这样:

awk '{if ((FNR % 4)==2) {print FNR":"$0}}' inputFile | grep '(=([14-9]|[23][0-9])' 

应该做的伎俩。

+0

谢谢!稍作修改,awk'{if((FNR%4)== 2){print FNR“:”$ 0}}'* | egrep'=([14-9] | [23] [0-9])'效果很好。 – Charles 2010-08-16 07:39:23

1

试着用awk做到这一点。成才像

BEGIN  {i=0; n=0; } 

/yourregegex/ { 
       if(i==n) { print $0; n= 4*i+2;} 
       } 

       { 
       i++; 
       } 
2

修改答案,而无需使用额外的grep,

awk '/(=([14-9]|[23][0-9])/ && FNR % 4==2{print FNR":"$0}}' inputFile