【问题标题】:grep with wildcards带通配符的 grep
【发布时间】:2013-02-09 01:17:03
【问题描述】:

我想用 grep 查找文件中的以下字符串:

directory1
directory2
directory3

有没有办法用 grep 同时 grep 全部 3 个?

例如:

cat file.txt | grep directory[1-3]

很遗憾,上述方法不起作用

【问题讨论】:

    标签: grep wildcard


    【解决方案1】:

    如果这些是您需要搜索的唯一字符串,请使用-F(用于固定字符串的 grep):

    grep -F "directory1
    directory2
    directory3" file.txt
    

    如果您想使用更高级的正则表达式进行 grep,请使用 -E(使用扩展的正则表达式):

    grep -E 'directory[1-3]' file.txt
    

    请注意,某些 greps(如 GNU grep)不需要 -E 才能使此示例正常工作。

    最后,请注意您需要引用正则表达式。如果你不这样做,你的 shell 可能会先根据路径名扩展来扩展正则表达式(例如,如果你在当前目录中有一个名为“directory1”的文件/目录,grep directory[1-3] 将被你的 shell 转换为 grep directory1 )。

    【讨论】:

      【解决方案2】:

      你在哪个shell下测试过?

      这里

      grep directory[1-3] 适用于 bash,不适用于 zsh

      您可以引用"directory[1-3]"

      或转义grep directory\[1-3\]

      bash v4.2
      zsh v5.0.2
      grep (GNUgrep 2.14)
      

      【讨论】:

        【解决方案3】:

        它不是很漂亮,但您可以将 grep 链接在一起:

        grep -l "directory1" ./*.txt|xargs grep -l "directory2"|xargs grep -l "directory3"
        

        限制输入以提高性能,例如使用 find:

        find ./*.txt -type f |xargs grep -l "directory1"|xargs grep -l "directory2"|xargs grep -l "directory3"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-07
          • 1970-01-01
          • 1970-01-01
          • 2012-08-13
          • 1970-01-01
          • 2017-01-08
          相关资源
          最近更新 更多