如何在"grep -R"中排除与glob模式匹配的多个目录?

use*_*175 23 linux grep

我在当前目录中有一些名称如"mm-yyyy"(01-2014)的目录.我想grep名称为"2013"​​的目录中的文件.如何排除名称中没有"2013"​​的目录?我尝试了以下但它不起作用:

grep hill * -R --exclude-dir=*201[0-2]
Run Code Online (Sandbox Code Playgroud)

它仍然通过所有子目录来做grep.

Reb*_*ury 45

grep -r --exclude-dir={dir1,dir2,dir3} string_to_search_for *
Run Code Online (Sandbox Code Playgroud)

  • 这里没有正则表达式魔法.Bash大括号扩展用于保存重新输入参数.上面的命令被解释为`grep -r --exclude-dir = dir1 --exclude-dir = dir2 --exclude-dir = dir3 string_to_search_for*`.查看(http://wiki.bash-hackers.org/syntax/expansion/brace)获取更多Bash魔法. (4认同)

Max*_*ann 19

你可以用

grep -R hill *-2013
Run Code Online (Sandbox Code Playgroud)

使用也--exclude-dir应该工作:

grep -R hill --exclude-dir=".*201[0-2]" .
Run Code Online (Sandbox Code Playgroud)

没有引号,星号将被bash扩展.另外,正则表达式的通配符是.*

. - matches any character
* - match any number of repetitions of the previous character, including none
Run Code Online (Sandbox Code Playgroud)