何时在 grep 搜索字符串中使用 \

何时在 grep 搜索字符串中使用 \

我的文件内容类似如下:

A+B
C+D
A+B

这些是字符串。我想搜索 的出现A+B。所以我将命令写为:grep 'A+B' test.txt。但是,如果我写 ,grep 'A\+B' test.txt则不会得到任何结果?而如果 而不是+字符串包含.,如果我添加\或不添加 ,则会得到搜索结果。我不明白:

1)什么时候应该添加\,什么时候不应该添加。

2)为什么我添加后没有得到任何结果,+而添加后却得到了结果.

答案1

您没有指定grep使用哪种风格,但您可能使用GNU grep。默认情况下grep使用Basic Regular Expressions,并且如中所述man grep

基本正则表达式与扩展正则表达式

在基本正则表达式中,元字符 ?、+、{、|、( 和
) 失去其特殊含义;而是使用反斜杠
版本 \?、+、{、\|、( 和 )。

请注意,如果您使用,-E您将切换到Extended Regular Expressions (ERE)并且必须使用,\+因为默认情况下,在 ERE和许多其他正则表达式语法中+代表one or more of the preceding character

$ grep -E 'A\+B' test.txt
A+B
A+B

因此,回答你的问题:

  1. \当您想要搜索文字字符时应该使用。

  2. 一个BRE点代表any character就像 一样ERE

答案2

egrep(或grep -E) 中启用扩展正则表达式。这些包括:

+ - match one or more instances of the previous match pattern.

这些可以在基本中使用,grep前面带有反斜杠,这不具有其通常的文字含义,而是调用函数egrep

因此以下是等效的:-

egrep 'A+B'
grep 'A\+B'

在两种情况下,匹配都是一个或多个As 后紧接着B

因为egrep'+' 有特殊含义,所以必须进行转义才能进行字面匹配,因此以下也是等效的:

egrep 'A\+B'
grep 'A+B'

这两种情况都会匹配A+B,因为两种情况下都需要寻找文字“+”。

egrep中可以通过转义使用的其他函数grep包括\|用于替代匹配字符串和\{M,N\},其中 M 和 N 是代表匹配模式的最小和最大重复次数的数字。这些在中不会被转义egrep

相关内容