我试图理解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
以及def
和123
。
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 中,基本语法和扩展语法之间的可用功能没有区别