【问题标题】:Automatically ignore files in grep自动忽略 grep 中的文件
【发布时间】:2009-12-12 04:29:53
【问题描述】:

有什么方法可以在搜索时使用 grep 忽略某些文件,类似于 svnignore 或 gitignore?我通常在搜索源代码时使用这样的东西。

grep -r something * | grep -v ignore_file1 | grep -v ignore_file2

即使我可以为 grep 设置一个别名来忽略这些文件也很好。

【问题讨论】:

  • 尝试了一些别名和函数派生词,最终得到了我在下面发布的一个衬里。很好的主意!这是我的 shell 中新增的内容!
  • 您可能还想查看 bash 的 GLOBIGNORE 变量。这让 shell 细化了 '*' 的含义。当然,grep -r 对您没有帮助,但它在您的工具箱中很方便。

标签: grep bash


【解决方案1】:

--exclude 上的 grep 选项也可以工作:

grep  perl * --exclude=try* --exclude=tk*

这会在当前目录中的文件中搜索 perl,不包括以 trytk 开头的文件。

【讨论】:

  • 这种帮助我的需要,--exclude 和--exclude-dir
  • 这基本上就是我所做的——除了我把它变成我的 bin 目录中的脚本,所以几乎没有打字。
  • 我用 --exclude 和 exclude-dir 以及许多其他颜色选项为 grep 创建了一个别名,现在让我的 grep 更容易
  • @ennuikiller - $ alias grep='grep -T --color --exclude=ignore_file* --exclude-dir=ignore-dir*'
【解决方案2】:

您可能还想看看ack,在许多其他功能中,默认情况下不搜索 .svn 和 .git 等 VCS 目录。

【讨论】:

    【解决方案3】:
    find . -path ./ignore -prune -o -exec grep -r something {} \;
    

    它的作用是查找当前目录中的所有文件,不包括名为“ignore”的目录(或文件),然后对在非忽略文件中找到的每个文件执行命令 grep -r something。

    【讨论】:

      【解决方案4】:

      使用外壳扩展

      shopt -s extglob
      for file in !(file1_ignore|file2_ignore) 
      do
        grep ..... "$file"
      done
      

      【讨论】:

        【解决方案5】:

        我认为 grep 没有文件名过滤。 要完成您正在尝试做的事情,您可以结合使用 find、xargs 和 grep 命令。 我记性不好,所以例子可能行不通:

        find -name "foo" | xargs grep "pattern"
        

        查找很灵活,您可以使用通配符、忽略大小写或使用正则表达式。 您可能需要阅读手册页以获取完整说明。

        阅读下一篇文章后,显然 grep 确实有文件名过滤。

        【讨论】:

          【解决方案6】:

          这是 .gitignore 的简约版本。需要标准工具:awk、sed(因为我的 awk 太蹩脚了)、egrep:

          cat > ~/bin/grepignore  #or anywhere you like in your $PATH
          egrep -v "`awk '1' ORS=\| .grepignore | sed -e 's/|$//g' ; echo`"
          ^D
          chmod 755 ~/bin/grepignore
          cat >> ./.grepignore  #above set to look in cwd
          ignorefile_1
          ...
          ^D
          grep -r something * | grepignore
          

          grepignore 构建一个简单的替换子句:

          egrep -v ignorefile_one|ignorefile_two
          

          效率不高,但适合手动使用

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-08-07
            • 1970-01-01
            • 2010-12-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多