macOS Monterey中grep命令匹配指定文件类型失败求助
解决macOS上grep多文件类型搜索的问题
问题原因分析
zsh shell扩展触发错误:
你在Linux上使用的--include=*.{c,cpp,js,xml}写法,在zsh中会被shell优先解析大括号扩展逻辑。如果当前目录下没有匹配*.c、*.cpp等后缀的文件,zsh就会抛出no matches found错误。BSD grep与GNU grep的语法差异:
macOS自带的是BSD版本的grep,它不支持GNU grep中用*.{xxx,yyy}这种大括号语法一次性指定多个文件类型。所以即便你给参数加了引号,命令也无法识别正确的文件范围,最终导致无输出。
正确写法
方法1:适配BSD grep的多文件类型指定
多次使用--include参数,每个文件后缀单独设置:
grep -Rnw ./ -e "subject" --include="*.c" --include="*.cpp" --include="*.js" --include="*.xml"
方法2:安装GNU grep(与Linux语法完全兼容)
通过Homebrew安装GNU版本的grep(默认命名为ggrep):
brew install grep
之后就能直接使用和Linux环境完全相同的命令:
ggrep -Rnw ./ -e "subject" --include=*.{c,cpp,js,xml}
内容的提问来源于stack exchange,提问作者SPlatten
相关产品推荐
相关产品推荐

