MacOSX 10.13.3下grep始终返回冲突匹配器错误求助
解决MacOS 10.13.3中grep始终报"conflicting matchers specified"的问题
这问题我之前帮朋友排查过,刚好就是brew装了GNU grep之后和系统自带的BSD grep冲突搞出来的,咱们一步步来解决:
先定位问题根源
检查当前调用的grep版本来源
打开终端执行:which grep如果输出是
/usr/local/bin/grep(或/opt/homebrew/bin/grep),说明你现在默认用的是brew安装的GNU grep;如果是/usr/bin/grep,那就是系统自带的BSD版本。检查是否有冲突的别名或环境变量
执行下面的命令看看有没有给grep设置别名:alias grep再检查有没有全局的grep参数配置:
echo $GREP_OPTIONS如果别名或
GREP_OPTIONS里同时出现了-F/--fixed-strings和-E/--extended-regexp这类互斥的参数,就会直接触发"conflicting matchers specified"错误——这俩参数分别对应固定字符串匹配和扩展正则匹配,根本没法同时用。
针对性解决方法
情况1:brew的GNU grep覆盖了系统版本
brew安装的GNU grep默认其实会被命名为ggrep,避免和系统grep冲突,但如果你的PATH配置把brew的目录放在了系统路径前面,或者手动改了名字,就会出现冲突。
- 如果你不需要GNU grep,直接卸载它:
重启终端后应该就能用系统自带的grep了。brew uninstall grep - 如果还要用GNU grep,别直接用
grep命令,改用ggrep,同时可以把系统grep设为默认:调整你的shell配置文件(比如~/.bashrc或~/.zshrc),把/usr/bin放在PATH的最前面,确保系统命令优先。
情况2:别名或环境变量有冲突参数
打开你的shell配置文件(比如~/.bash_profile、~/.zshrc),找到和grep相关的别名或GREP_OPTIONS设置:
- 如果别名里同时写了
-F和-E,删掉其中一个; - 如果
GREP_OPTIONS里有冲突参数,修改成单一匹配器的配置,比如只保留--color=auto这类非冲突参数。
修改完后保存文件,执行source ~/.bashrc(或对应的配置文件)让改动生效,再试试grep命令应该就正常了。
内容的提问来源于stack exchange,提问作者Josh Bradley
相关产品推荐
相关产品推荐

