【发布时间】:2010-08-16 07:19:06
【问题描述】:
我在一个目录中有一组文件,我想搜索一个特定的正则表达式(=([14-9]|[23][0-9]),碰巧)。但我只关心这种模式何时落在第二、六、十、...、4n+2 行。
有什么好办法吗?
【问题讨论】:
我在一个目录中有一组文件,我想搜索一个特定的正则表达式(=([14-9]|[23][0-9]),碰巧)。但我只关心这种模式何时落在第二、六、十、...、4n+2 行。
有什么好办法吗?
【问题讨论】:
在不使用额外 grep 的情况下修改答案,
awk '/(=([14-9]|[23][0-9])/ && FNR % 4==2{print FNR":"$0}}' inputFile
【讨论】:
您应该首先将其传递给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])'
应该可以解决问题。
【讨论】:
尝试使用 awk 执行此操作。有点像
BEGIN {i=0; n=0; }
/yourregegex/ {
if(i==n) { print $0; n= 4*i+2;}
}
{
i++;
}
【讨论】: