我正在寻找与一行中的字符串rr完全匹配的 grep 正则表达式。
数据文件的一个例子是:
rr qrrr abc rr d rarrrrrr aaa rr qq kdhd rr aa rr zaza
和预期的结果:
rr
abcrr d
rarrrrrr aaa rrqq
kdhdrraa rrzaza
Run Code Online (Sandbox Code Playgroud)
有什么建议?
Sté*_*las 11
使用标准grep
语法和 BRE:
$ grep -x '\(.*[^r]\)\{0,1\}rr\([^r].*\)\{0,1\}' <文件 rr abcrd rarrrrrr aaa rrqq kdhdrraa rrzaza
(替换rr
用r\{42\}
42个r
S)
即在可选(0 或 1,相当于 ERE )上匹配 e x(即整行),前面是以除( )以外的字符结尾的字符序列,并且可选地后跟以开头的字符序列以外的字符。rr
\{0,1\}
?
r
[^r]
r
使用 ERE:
$ grep -E '(^|[^r])rr([^r]|$)' < 文件 rr ab crr d rarrrrrr aaa rrq q kdh drra a rrz aza
(替换rr
用r{42}
42个r
S)
即rr
由线或比其他字符的任一个开始之前r
和随后线的任末端或以外的字符r
。
使用 PCRE(非标准):
$ grep -P '(?<!r)rr(?!r)' < 文件 rr abc rr d rarrrrrr AAA RR qq kdhd rr aa rr zaza
(替换rr
用r{42}
42个r
S)
也就是说,rr
既不在 之前也不在 之后r
。
使用增强RE (ast-open grep
):
$ grep -xX '(.*r)!rr(r.*)!' < 文件 rr abcrd rarrrrrr aaa rrqq kdhdrraa rrzaza
(替换rr
用r{42}
42个r
S)