grep regex 在 mac 上的工作方式不同吗?

Rmy*_*my5 12 mac terminal grep regex macos

只是想在 mac 终端(BSD grep - 2.5.1-FreeBSD)中找出带有 grep(或 egrep)的正则表达式的基本用法。

要检查的文件 ( pow.txt) 包含以下行:

kiytytytyty
Run Code Online (Sandbox Code Playgroud)

blob.mkv
Run Code Online (Sandbox Code Playgroud)

使用的命令是:

grep -E ^[a-z]+\.[a-z]{3}$i pow.txt
Run Code Online (Sandbox Code Playgroud)

返回的匹配是:

kiytytytyty
Run Code Online (Sandbox Code Playgroud)

显然这与 PCRE 正则表达式不匹配。正则表达式在 mac 上的解释不同吗?还是我的语法错误?

小智 14

如果您要匹配blob.mkv,请尝试:

grep -Ei '^[a-z]+\.[a-z]{3}$' pow.txt
Run Code Online (Sandbox Code Playgroud)

  • 话虽如此,PCRE 语法与`grep -E` 支持的正则表达式方言在每个平台上都不同,而不仅仅是在 Mac 上。GNU `grep` 有 `grep -P` 用于 PCRE 语法;它曾经也存在于 Mac 上,但由于只有 Apple 可以解释的原因而被删除。也许阅读 BRE vs ERE vs PCRE。简而言之,`\s \w \d` 和朋友、环视、命名组、原子匹配和非贪婪量词是 PCRE 中仅存在的一些功能。 (6认同)
  • 和不; 正则表达式在 Mac 上没有不同的解释。但是你的 shell 吃了反斜杠(并且可能用空字符串替换了 `$i`,除非你在这个变量中有东西),因为你没有引用正则表达式。 (2认同)