我可以在使用正则表达式找到一行之后使用一个步骤吗?
例如,
对于文件
A
B
C
D
E
F
这有效,
sed '2~2p' -n
B
D
F
但这不起作用
sed '/B/~2p' -n
我被未知的命令所指责〜
由于
答案 0 :(得分:3)
如果您阅读sed(GNU sed
)的信息/手册页,则否地址格式如下:
/REGEX/~step
有:
FIRST~STEP
,需要两个号码,ADDR1, ~N
与ADDR1
和第1行号(否)之间的范围相匹配,no%N==0
我认为你要么被上面的两个搞糊涂了,要么没有检查手册页,只是觉得“应该”是这样的地址。
我想,你想这样做:
kent$ seq 10|sed -n '/2/,${p;n}'
2
4
6
8
10
答案 1 :(得分:0)
awk可以用更详细的方式做你所要求的事情:
seq 20 |
awk -v pattern="4" -v step=3 '
!start && $0 ~ pattern {start = NR}
start && (NR-start)%step == 0
'
4
7
10
13
16
19
答案 2 :(得分:0)
如果您对此感兴趣,可以在awk中实现同样的目标:
awk '/B/,0 {i++}i%2' file
范围运算符在匹配模式时求值为true,并保持为真,直到文件结束。虽然这是真的,i
会增加,当它是奇数时,会打印这条线。
上述版本适用于打印所有其他行,但不适用于每个N
行的更一般情况。为此,您可以稍微修改它:
awk '/B/,0 {i++} i%N==1' file
其中N
是你的步骤。