使用正则表达式匹配字符重复 n 次的行

使用正则表达式匹配字符重复 n 次的行

我正在寻找与字符串完全匹配的 grep 正则表达式RR在一条线上。
数据文件的示例是:

RR                     
q rr 一个                 
  ABCRRd                
啦啦啦啦aaaRRQQ   
克德哈德RRRR扎扎

以及预期的结果:

rr
  abcrr d
rarrrrrr aaa rrqq
kdhdrraa rrzaza

有什么建议么?

答案1

使用标准grep语法和 BRE:

$ grep -x '\(.*[^r]\)\{0,1\}rr\([^r].*\)\{0,1\}' < 文件
RR
abcr d
rarrrrrr aaa rrqq
克德德拉·扎扎

(替换rrr\{42\}42r秒)

那就是匹配 eXactly(即整行)rr可选地(\{0,1\}为 0 或 1,相当于 ERE ),前面是以( )?以外的字符结尾的字符序列,并且可选地后面是以 以外的字符开头的字符序列。r[^r]r

使用 ERE:

$ grep -E '(^|[^r])rr([^r]|$)' < 文件
RR
abcrrd
啦啦啦啦aaaRRqq
克德赫德拉Arz阿扎

(替换rrr{42}42r秒)

前面是rr行的开头或不是 的字符r,后面是行的结尾或不是 的字符r

使用PCRE(非标准):

$ grep -P '(?<!r)rr(?!r)' < 文件
RR
ABCRRd
啦啦啦啦aaaRRQQ
克德哈德RRRR扎扎

(替换rrr{42}42r秒)

那是,rr 不是之前或之后都是r.

增强型RE(ast-open grep):

$ grep -xX '(.*r)!rr(r.*)!' < 文件
RR
abcr d
rarrrrrr aaa rrqq
克德德拉·扎扎

(替换rrr{42}42r秒)

相关内容