仅限于某些文件行

时间:2010-08-16 07:19:07

标签: regex shell grep

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

有没有好办法呢?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

尝试使用awk执行此操作。像

这样的东西
BEGIN     {i=0; n=0; }

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

               {
               i++;
               }

答案 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])'

应该这样做。