如何找出当前目录中不包含单词foo(使用grep)的文件?
当前回答
下面的命令给出了所有不包含foo模式的文件:
find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep 0
其他回答
find *20161109* -mtime -2|grep -vwE "(触发器)"
你可以在"find"下指定过滤器,在"grep -vwE"下指定排除字符串。如果你也需要对修改后的时间进行过滤,请在find下使用mtime。
我运气很好
grep -H -E -o -c "foo" */*/*.ext | grep ext:0
我用grep -v的尝试只是给了我所有没有“foo”的行。
当您使用find时,您有两个基本选项:在find完成搜索后过滤结果,或者使用一些内置选项来阻止find考虑那些匹配某些给定模式的文件和dirs。
如果您在大量的文件和dirs上使用前一种方法。您将使用大量的CPU和RAM来将结果传递给第二个进程,而第二个进程反过来也会使用大量的资源来过滤结果。
如果你使用-not关键字作为一个find参数,你将阻止任何与后面的name或-regex参数上的字符串匹配的路径被考虑,这将更有效。
find . -not -regex ".*/foo/.*" -regex ".*"
然后,任何没有被-not过滤掉的路径都将被后续的-regex参数捕获。
为了完整,ripgrep版本如下:
rg --files-without-match "pattern"
你可以结合文件类型和搜索路径,例如:
rg --files-without-match -t ruby "frozen_string_literal: true" app/
grep -irnw "filepath" -ve "pattern"
or
grep -ve "pattern" < file
上面的命令会给我们结果,因为-v找到了正在搜索的模式的倒数
推荐文章
- 在Windows中有像GREP这样的模式匹配实用程序吗?
- 如何在Python中获得所有直接子目录
- 即使模板文件存在,Flask也会引发TemplateNotFound错误
- 如何从命令行将每两行合并为一行?
- 如何复制在bash所有目录和文件递归?
- 如何在Ruby中创建文件
- __FILE__宏显示完整路径
- 匹配前后的Grep字符?
- (grep)正则表达式匹配非ascii字符?
- 如何从另一个文件A中删除文件B中出现的行?
- 如何使用查找命令从列表中查找所有具有扩展名的文件?
- 如何将文件指针(file * fp)转换为文件描述符(int fd)?
- 如何删除文件中的特定行?
- 使用Java重命名文件
- PowerShell等价于grep -f