我有一个目录中的文件集合,我想搜索特定的正则表达式(=([14-9]|[23][0-9])
,因为它发生)。但是我只关心这个模式落在第二,第六,第十,......,第四和第二行。
有没有好办法呢?
答案 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])'
应该这样做。