尖括号的正则表达式行为

Sha*_*arr 1 regex grep

请解释为什么以下表达式不输出任何内容:

echo "<firstname.lastname@domain.com>" | egrep "<lastname@domain.com>"
Run Code Online (Sandbox Code Playgroud)

但以下是:

echo "<firstname.lastname@domain.com>" | egrep "\<lastname@domain.com>"
Run Code Online (Sandbox Code Playgroud)

第一个的行为是预期的,但第二个不应该输出.在正则表达式中是否会忽略"\ <"或导致其他一些特殊行为?

Avi*_*Raj 6

AS @hwnd说\<匹配这个词的开头.ie字边界\b必须(存在起始字字符前后的字符\<在输入必须是字字符),

在你的例子中,

echo "<firstname.lastname@domain.com>" | egrep "<lastname@domain.com>"
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,egrep检查<在lastname字符串之前存在的文字字符.但没有,所以它什么都不打印.

$ echo "<firstname.lastname@domain.com>" | egrep "\<lastname@domain.com>"
<firstname.**lastname@domain.com>**
Run Code Online (Sandbox Code Playgroud)

但在此示例中,字符边界\b存在于lastname字符串之前,因此它会打印匹配的字符.

更多例子:

$ echo "namelastname@domain.com" | egrep "\<e@domain.com"
$ echo "namelastname@domain.com" | egrep "\<lastname@domain.com"
$ echo "namelastname@domain.com" | egrep "\<com"
namelastname@domain.**com**
$ echo "<firstname.lastname@domain.com>" | egrep "\<@domain.com>"
$ echo "n-ame-lastname@domain.com" | egrep "\<ame-lastname@domain.com"
n-**ame-lastname@domain.com**
Run Code Online (Sandbox Code Playgroud)