我无法理解如何在正则表达式中逃脱。 我知道,如果我在字符前加上'\',它应该与字符串匹配。
但如果我输入
echo "hello 8 9 2013" | grep -e "^hello|hello$"
我一无所获。 如果我输入
echo "ciao 8 9 2013" | grep -e "^ciao\|ciao$"
它运作正常。
有人可以解释一下这种行为的原因吗?
在第二个代码中,我希望grep找到一个“|”,而在第一个代码中,我希望grep将它解释为“或”。但我恰恰相反。
答案 0 :(得分:1)
默认情况下,grep
实现“基本”正则表达式,其中|
是普通字符,而\|
是交替运算符。如果您使用grep -E
(或更早的名称egrep
),它会实现“扩展”正则表达式,这对于此运算符的工作方式相反。
这里解释了基本和扩展正则表达式之间的区别:
答案 1 :(得分:0)
grep
中的默认正则表达式引擎是基本正则表达式(BRE),需要转义|
。
您可以使用-E
扩展正则表达式覆盖此行为,如下所示:
echo "hello 8 9 2013" | grep -E "^hello|hello$"
根据man grep
:
-E, --extended-regexp
Interpret pattern as an extended regular expression (i.e. force grep to behave as egrep).