2010-08-16 129 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