我正在寻找与一行中的字符串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个rS)
即在可选(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个rS)
即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个rS)
也就是说,rr 既不在 之前也不在 之后r。
使用增强RE (ast-open grep):
$ grep -xX '(.*r)!rr(r.*)!' < 文件 rr abcrd rarrrrrr aaa rrqq kdhdrraa rrzaza
(替换rr用r{42}42个rS)