macos - grep -P 不再有效。如何重写我的搜索?

标签 macos perl shell

看起来新版本的 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/

相关文章:

swift - MASShortcut 没有这样的模块

windows - Flutter Desktop 使用鼠标滚轮滚动 : step size

sql - 与多合一表相比,使用单独的角色桥接表有哪些优势?

php - 使用特定日期的 shell 命令从 SQL 转储数据库

macos - 通过终端从 github 访问提交历史记录?

macos - 如何使用 Homebrew 在 macOS Mojave(10.14) 上安装 Valgrind?

perl - 如何让 CPAN 测试人员加载一个先决条件的开发版本?

python - perl 中的多个哈希分配 - 转换为 python?为什么总是等于 1?

java - 从java程序运行linux命令txl

bash - 在创建脚本以更新/etc/hosts 文件中的主机名时遇到多个问题?