在 Mac 上使用 BSD 通用命令版本中的特定 grep 标志

在 Mac 上使用 BSD 通用命令版本中的特定 grep 标志

因此,我一直在使用通过 curl 传输的命令(在 GNU/Linux 的 grep 实用程序上)来生成随机密码字符串,以加强某些帐户的安全性。

curl -s https://www.grc.com/passwords.htm | grep -oP '[a-zA-Z0-9]{63}' | tail -n1 | cut -c1-63

我正在尝试让这个命令在 Mac 上运行,但 Mac 的 BSD General Utilities 是基于 Unix 的,因此标志有所不同。我参考了 BSD General 命令实用程序的 grep 手册页,发现一些标志似乎可以工作,但我无法让它正确解析页面。如果有人能给我指明正确的方向,或者让我知道我遗漏了什么,我将不胜感激。

我感觉它就在我面前。

-e面旗帜看似正义,但实际上却不起作用。

-e pattern, --regexp=pattern 指定在搜索输入时使用的模式:如果输入行与任何指定的模式匹配,则选择该输入行。当使用多个 -e 选项指定多个模式,或者当模式以破折号 ('-') 开头时,此选项最有用。

答案1

-o(仅打印行的匹配部分)在 BSD 和 GNU grep 上是相同的。
-P(使用 Perl 兼容正则表达式,又名“PCRE”)特定于 GNU grep。

幸运的是,您的示例正则表达式不使用任何 PCRE 特定的语法。但它也不符合经典的 Unix RE 语法。它需要“扩展”正则表达式 (ERE)。您可以在 BSD grep 上通过添加-E或调用egrep而不是来获得它grep

curl -s https://www.grc.com/passwords.htm | grep -oE '[a-zA-Z0-9]{63}' | tail -n1 | cut -c1-63

如果您有其他确实需要 PCRE 的 RE,您可以随时通过 Homebrew、MacPorts 或 Fink 等包管理器安装 GNU grep(如果您愿意,还可以安装您喜欢的任何其他开源软件包的绝大多数)。

相关内容