正则表达式问题:在随机位置上仅匹配序列n次

3sd*_*dmx 7 regex grep

我有一个正则表达式问题,例如:

  1. ...... AAA BZBZB CCCDDD ......
  2. ... BZBZB DDD BZBZB CCC ......

我要寻找一个正则表达式匹配BZBZB只是ñ倍.
在一条线上.所以,如果我只想匹配序列一次,我应该只将第一行作为输出.

该字符串出现在文本中的随机位置.正则表达式应该与grep或egrep兼容...

提前谢谢.

Kei*_*win 11

grep '\(.*BZBZB\)\{5\}'将执行5次,但这将匹配出现5次或更多次的任何内容,因为grep检查行的任何子字符串是否匹配.因为grep没有任何方法可以对正则表达式中的字符串进行负匹配(只有字符),所以单个命令无法做到这一点,除非,例如,您知道要匹配的字符串中使用的字符不是用于别处.

但是,您可以在两个grep命令中执行此操作:

cat temp.txt | grep '\(.*BZBZB\)\{5\}' | grep -v '\(.*BZBZB\)\{6\}'

将返回BZBZB恰好出现5次的行.(基本上,它正在进行5次或更多次的正面检查,然后进行6次或更多次的否定检查.)