![在 Mac 上使用 BSD 通用命令版本中的特定 grep 标志](https://linux22.com/image/1481501/%E5%9C%A8%20Mac%20%E4%B8%8A%E4%BD%BF%E7%94%A8%20BSD%20%E9%80%9A%E7%94%A8%E5%91%BD%E4%BB%A4%E7%89%88%E6%9C%AC%E4%B8%AD%E7%9A%84%E7%89%B9%E5%AE%9A%20grep%20%E6%A0%87%E5%BF%97.png)
因此,我一直在使用通过 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(如果您愿意,还可以安装您喜欢的任何其他开源软件包的绝大多数)。