【问题标题】:How to exclude multiple directories that match a glob pattern in "grep -R"?如何在“grep -R”中排除与 glob 模式匹配的多个目录?
【发布时间】:2016-06-01 20:38:29
【问题描述】:

我在当前目录中有一些名称如“mm-yyyy”(01-2014)的目录。我想 grep 名称为“2013”​​的目录中的文件。如何排除名称没有“2013”​​的目录?我尝试了以下方法,但没有成功:

grep hill * -R --exclude-dir=*201[0-2]

它仍然通过所有子目录来执行 grep。

【问题讨论】:

    标签: linux grep


    【解决方案1】:
    grep -r --exclude-dir={dir1,dir2,dir3} string_to_search_for *
    

    【讨论】:

    • 当有问题的目录没有简单的正则表达式时很有用
    • 这里没有正则表达式的魔力。 Bash 大括号扩展用于节省重新输入参数。上面的命令被解释为grep -r --exclude-dir=dir1 --exclude-dir=dir2 --exclude-dir=dir3 string_to_search_for *。查看 (wiki.bash-hackers.org/syntax/expansion/brace) 了解更多 Bash 魔法。
    【解决方案2】:

    你可以使用

    grep -R hill *-2013
    

    使用--exclude-dir 也应该可以:

    grep -R hill --exclude-dir=".*201[0-2]" .
    

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

    . - matches any character
    * - match any number of repetitions of the previous character, including none
    

    【讨论】:

    • 谢谢,马克斯。有用。但我想知道我是否可以使用 --exclude-dir 来实现同样的效果。
    • 我已经编辑了我的答案以包含--exclude-dir的解决方案
    • 我尝试了排除目录,但它没有做任何事情。没有输出。它只是坐在那里等待更多的用户输入。所以我在“hill”之后添加了*,它没有用
    • 啊好的,使用 .而不是 . 指定所有目录,并在其中触发排除模式 - 什么不是,你想要什么
    • 点有效。但“201[02]”仅排除带有“2010”和“2012”的目录。要排除带有“2010”、“2011”和“2012”的目录,我必须使用:“201[012]”。请更新答案,以便我可以将其标记为已接受。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2011-09-27
    • 2012-03-21
    • 2017-12-09
    • 2016-05-26
    • 2014-07-30
    • 2021-12-14
    相关资源
    最近更新 更多