我正在寻找与字符串完全匹配的 grep 正则表达式RR在一条线上。
数据文件的示例是:
RR q rr 一个 ABCRRd 啦啦啦啦aaaRRQQ 克德哈德RR啊 RR扎扎
以及预期的结果:
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 克德德拉·扎扎
(替换rr
为r\{42\}
42r
秒)
那就是匹配 eXactly(即整行)rr
可选地(\{0,1\}
为 0 或 1,相当于 ERE ),前面是以( )?
以外的字符结尾的字符序列,并且可选地后面是以 以外的字符开头的字符序列。r
[^r]
r
使用 ERE:
$ grep -E '(^|[^r])rr([^r]|$)' < 文件 RR abcrrd 啦啦啦啦aaaRRqq 克德赫德拉Arz阿扎
(替换rr
为r{42}
42r
秒)
前面是rr
行的开头或不是 的字符r
,后面是行的结尾或不是 的字符r
。
使用PCRE(非标准):
$ grep -P '(?<!r)rr(?!r)' < 文件 RR ABCRRd 啦啦啦啦aaaRRQQ 克德哈德RR啊RR扎扎
(替换rr
为r{42}
42r
秒)
那是,rr
不是之前或之后都是r
.
和增强型RE(ast-open grep
):
$ grep -xX '(.*r)!rr(r.*)!' < 文件 RR abcr d rarrrrrr aaa rrqq 克德德拉·扎扎
(替换rr
为r{42}
42r
秒)