使用grep时的Globbing语法(实为brace expansion):为何无法生效?
grep --include 参数的通配符使用误区
你的问题出在对grep的--include参数通配符规则的误解:
grep自身不支持shell的大括号扩展语法(比如{Rmd,R}),这种大括号扩展是bash等shell的特性,不是grep内置的通配符规则。当你写--include="*{Rmd,R}"时,grep会把*{Rmd,R}当作一个完整的匹配模式,它只会去找文件名里包含{Rmd,R}字符串的文件,自然找不到你要的R或Rmd后缀文件。
正确的做法有两种:
- 多次使用
--include参数,分别指定每种后缀:
grep -rl --include="*Rmd" --include="*R" "plotRFPByPosition" .
- 利用shell的扩展生成多个
--include参数(不过第一种更直观):
grep -rl $(printf -- '--include="*%s" ' R Rmd) "plotRFPByPosition" .
简单来说,grep的--include只接受单个通配符模式,要匹配多种后缀就得多次声明这个参数,而不是用shell的大括号扩展语法塞进一个--include里。
内容的提问来源于stack exchange,提问作者mikemtnbikes
相关产品推荐
相关产品推荐

