看起来新版本的 OS X 不再支持 grep -P
,因此导致我的一些脚本停止工作,例如:
var1=`grep -o -P '(?<=<st:italic>).*(?=</italic>)' file.txt`
我需要将 grep 的结果捕获到变量中,并且需要使用零宽度断言以及 \K
:
var2=`grep -P -o '(property:)\K.*\d+(?=end)' file.txt`
任何替代方案将不胜感激。
最佳答案
如果您的脚本仅供您使用,您可以从 homebrew-core
安装 grep
使用brew
:
brew install grep
然后它可以作为ggrep
(GNU grep
)使用。
它不会取代系统 grep
(您需要将已安装的 grep 放在 PATH
上系统 grep 之前)。
brew 安装的版本包含 -P
选项,因此您无需更改脚本。
如果您需要使用这些命令及其正常名称,您 可以从 bashrc 添加一个“gnubin”目录到你的 PATH 中,如下所示:
PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"
您可以在 ~/.bashrc 或 ~/.zshrc 上导出此行,以将其保留用于新 session 。
请参阅here讨论旧的 --with-default-names
选项及其(最近)删除的优缺点。
关于macos - grep -P 不再有效。如何重写我的搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16658333/