在搜索某些内容时,有什么方法可以使用grep来忽略某些文件,相当于svnignore或gitignore?在搜索源代码时,我通常会使用类似的东西。
grep -r something * | grep -v ignore_file1 | grep -v ignore_file2
即使我可以设置grep的别名来忽略这些文件也不错。
答案 0 :(得分:9)
--exclude
选项也可以起作用:
grep perl * --exclude=try* --exclude=tk*
这会在当前目录中的文件中搜索perl,不包括以try
或tk
开头的文件。
答案 1 :(得分:2)
您可能还想查看ack,在许多其他功能中,默认情况下不会搜索.svn和.git等VCS目录。
答案 2 :(得分:1)
find . -path ./ignore -prune -o -exec grep -r something {} \;
这样做是找到当前目录中除名为“ignore”的目录(或文件)之外的所有文件,然后对非忽略文件中的每个文件执行命令grep -r something。
答案 3 :(得分:1)
使用shell扩展
shopt -s extglob
for file in !(file1_ignore|file2_ignore)
do
grep ..... "$file"
done
答案 4 :(得分:0)
我认为grep没有文件名过滤功能。 要完成您要执行的操作,可以组合find,xargs和grep命令。 我的记忆力不好,所以这个例子可能不起作用:
find -name "foo" | xargs grep "pattern"
查找非常灵活,您可以使用通配符,忽略大小写或使用正则表达式。 您可能需要阅读手册页以获得完整描述。
阅读下一篇文章后,显然grep确实有文件名过滤。
答案 5 :(得分:0)
这是.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
效率不高,但适合手动使用