如何从第n个匹配打印到文件中的第m个匹配?
例如
>1
dfgsdrhsdtrh
>2
zdfrgsdh
>3
zdsfgadrh
>4
sdtrh
>5
drh
如果我想要第2到第4场比赛到正则表达式' ^>',包括第N场比赛以及最多但不包括第M + 1场比赛。屈服,例如:
>2
zdfrgsdh
>3
zdsfgadrh
>4
sdtrh
答案 0 :(得分:1)
使用gnu-awk可以使用此awk
:
awk -v RS='>' -v ORS='>' 'BEGIN{printf ">"} NR>5{exit} NR>2 && NR<=5' file
>2
zdfrgsdh
>3
zdsfgadrh
>4
sdtrh
答案 1 :(得分:0)
如果支持,您可以使用\K
构造。如果没有,只需删除\K
并放置捕获
关于它后面的内容的括号。
# (?m)(?:^>.*\r?\n(?:^(?!>).*\r?\n)*){1}\K(?:^>.*\r?\n(?:^(?!>).*\r?\n)*){3}
(?m) # MULTI_LINE mode
(?: # 0 to N-1
^ > .* \r? \n
(?:
^
(?! > )
.* \r? \n
)*
){1} # Do N-1 times
\K # Disgard previous from match
(?: # N to M+1
^ > .* \r? \n
(?:
^
(?! > )
.* \r? \n
)*
){3} # Do M+1-N times
输出:
** Grp 0 - ( pos 18 , len 40 )
>2
zdfrgsdh
>3
zdsfgadrh
>4
sdtrh
答案 2 :(得分:0)
以下是awk
解决方案:
awk -v RS=">" '$1>=2 && $1<=4 {$0=RS$0;gsub(/\n$/,"");print}' file
>2
zdfrgsdh
>3
zdsfgadrh
>4
sdtrh
它会将记录从>2
打印到>4