可以使用正则表达式查找一行后使用一个步骤吗?正则表达式后的sed步骤
例如,
对于文件
A
B
C
D
E
F
这工作,
sed '2~2p' -n
B
D
F
但这不起作用
sed '/B/~2p' -n
我对未知的命令指责〜
个感谢
可以使用正则表达式查找一行后使用一个步骤吗?正则表达式后的sed步骤
例如,
对于文件
A
B
C
D
E
F
这工作,
sed '2~2p' -n
B
D
F
但这不起作用
sed '/B/~2p' -n
我对未知的命令指责〜
个感谢
如果你读SED(GNU sed
)的信息/ man页面,有NO地址格式是这样的:
/REGEX/~step
有:
FIRST~STEP
,需要两个数字,并且ADDR1, ~N
它与之间的范围匹配和一号线数(无),即no%N==0
我认为你要么由两个以上的困惑,或者没有检查手册页,只是认为有“应该是”这样的地址。
我猜,你想这样做:
kent$ seq 10|sed -n '/2/,${p;n}'
2
4
6
8
10
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
这里有一个方法你可以在awk中实现同样的事情,如果你有兴趣:
awk '/B/,0 {i++}i%2' file
当模式匹配时,范围运算符的计算结果为true,并在文件结尾保持为真。虽然这是真的,但i
会增加,当它是奇数时,会打印此行。
上述版本适用于每隔一行打印,但不适用于每行N
行的更一般情况。为了做到这一点,你可以稍微修改它是这样的:
awk '/B/,0 {i++} i%N==1' file
其中N
是你的一步。
您的预期结果是什么? – Subbeh