Grepping только определенные строки файлов - PullRequest
1 голос
/ 16 августа 2010

У меня есть коллекция файлов в каталоге, которую я хотел бы найти для определенного регулярного выражения (=([14-9]|[23][0-9]), как это происходит). Но мне все равно, когда этот шаблон попадает на вторую, шестую, десятую, ..., 4n + 2-ю строку.

Есть ли хороший способ сделать это?

Ответы [ 3 ]

2 голосов
/ 16 августа 2010

модификация ответа без использования дополнительного grep,

awk '/(=([14-9]|[23][0-9])/ && FNR % 4==2{print FNR":"$0}}' inputFile 
1 голос
/ 16 августа 2010

Вы должны сначала пройти через 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])'

должно сработать.

1 голос
/ 16 августа 2010

попробуйте сделать это с помощью awk. Что-то вроде

BEGIN     {i=0; n=0; }

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

               {
               i++;
               }
...