grep -e 和 grep -E 选项有什么区别?

grep -e 和 grep -E 选项有什么区别?

我试图理解grep -e和之间的区别grep -E。现在grep manpage我得到:

-E, --扩展正则表达式

将 PATTERN 解释为扩展正则表达式(见下文)。

-e 模式,--regexp=模式

使用PATTERN作为模式;对于保护以 - 开头的模式很有用

上面的解释对我来说没有意义。

那么,有人可以向我解释一下examples两者之间的区别以及何时使用哪个选项。

PS:版本:grep(GNU grep)2.10

答案1

-e严格来说是用于指示要匹配的模式的标志。-E控制是否需要转义某些特殊字符。

man grep-E进一步解释一下:

Basic vs Extended Regular Expressions
In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their 
special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \).

Traditional  egrep  did  not  support  the  {  meta-character, and some egrep 
implementations support \{ instead, so portable scripts should avoid { in grep -E
patterns and should use [{] to match a literal {.

GNU grep -E attempts to support traditional usage by assuming that { is not 
special if it would be the start of an invalid interval specification. 
For example, the command grep -E '{1' searches for the two-character string {1 
instead of reporting a syntax error in the regular expression.  POSIX.2 allows 
this behavior as an extension, but portable scripts should avoid it.

答案2

grep -e允许使用多个字符串进行搜索:'grep -e 'abc' -e 'def' -e '123'将查找这三个字符串中的任何一个:abc以及def123

grep 'abc\|def\|123'它的工作原理与where\|代表的非常相似or,但阅读起来可能更清晰一些。

由于这里已经解释了最重要的事实grep -E,我只想添加我在一个非常相似的问题上对此主题的总结:在 Bash 中查找双字符的正则表达式

答案3

只是为了详细说明该-e选项。-e通常是可选的:

grep PATTERN

grep -e PATTERN

除非,如之前的答案和手册页中所述,存在多种搜索模式,或者保护以连字符 (-) 开头的模式。

答案4

见下文

/扩展

grep 理解三种不同版本的正则表达式语法:“基本”、“扩展”和“perl”。在 GNU grep 中,基本语法和扩展语法之间的可用功能没有区别。在其他实现中,基本正则表达式的功能不太强大。以下描述适用于扩展正则表达式;随后总结了基本正则表达式的差异。 Perl 正则表达式提供了附加功能,并记录在 pcresyntax(3) 和 pcrepattern(3) 中,但可能并非在每个系统上都可用。

那么,再一次。

在 GNU grep 中,基本语法和扩展语法之间的可用功能没有区别

相关内容