这一切都取决于您传递给 grep 的标志。
正常的无标志 grep(与传递 -G 相同)使用“基本正则表达式”:
-G, --basic-regexp
Interpret PATTERN as a basic regular expression (BRE, see
below). This is the default.
Run Code Online (Sandbox Code Playgroud)
如果您指定 -E 它使用“扩展”正则表达式:
-E, --extended-regexp
Interpret PATTERN as an extended regular expression (ERE,
see below). (-E is specified by POSIX.)
Run Code Online (Sandbox Code Playgroud)
然后你有 Perl 正则表达式 (PCRE) 的 -P:
-P, --perl-regexp
Interpret PATTERN as a Perl regular expression. This is highly
experimental and grep -P may warn of unimplemented features.
Run Code Online (Sandbox Code Playgroud)
基本与扩展正则表达式
在基本的正则表达式的元字符?,+,{,|, (,和)失去了特殊的意义; 改用反斜杠的版本\?,\+,\{,\|,\(,和\)。
传统的 egrep 不支持{元字符,而一些 egrep 实现支持\{,因此可移植脚本应避免{使用 grep -E 模式,而[{]应用于匹配文字{.
GNU grep -E 试图通过假设它{是无效间隔规范的开始并不特殊来支持传统用法。例如,该命令 grep -E '{1' 搜索两个字符的字符串,{1而不是报告正则表达式中的语法错误。POSIX.2 允许将此行为作为扩展,但可移植脚本应避免它。
因此,尽管 grep 努力尽可能接近 POSIX,但它仍然存在一些缺陷。
| 归档时间: |
|
| 查看次数: |
1962 次 |
| 最近记录: |