如何找出当前目录中不包含单词foo(使用grep)的文件?
当前回答
我运气很好
grep -H -E -o -c "foo" */*/*.ext | grep ext:0
我用grep -v的尝试只是给了我所有没有“foo”的行。
其他回答
如果你的grep有-L(或——files-without-match)选项:
$ grep -L "foo" *
打开错误报告
正如@tukan所评论的,Ag有一个关于-L/——files-without-matches标志的开放错误报告:
Ggreer /the_silver_searcher: #238 -——files-without-matches不能正常工作
由于bug报告几乎没有进展,所以不应该依赖下面提到的-L选项,只要bug还没有解决。请使用本文中介绍的不同方法。引用bug报告的注释[强调我的]:
有最新进展吗?-L完全忽略文件第一行的匹配项。似乎如果这个问题不会很快得到解决,这个标志应该被完全移除,因为它根本不像宣传的那样有效。
Silver Searcher - Ag(预期功能-见错误报告)
作为grep的强大替代品,您可以使用the Silver Searcher - Ag:
一个类似于ack的代码搜索工具,专注于速度。
查看man ag,我们找到了-L或——files-without-matches选项:
... 选项 ... - l - files-without-matches 只打印不包含匹配项的文件名。
也就是说,从当前目录中递归搜索不匹配foo的文件:
ag -L foo
要只搜索当前目录中不匹配foo的文件,只需为递归指定——depth=0:
ag -L foo --depth 0
grep -irnw "filepath" -ve "pattern"
or
grep -ve "pattern" < file
上面的命令会给我们结果,因为-v找到了正在搜索的模式的倒数
下面的命令可以帮助你过滤包含子字符串“foo”的行。
cat file | grep -v "foo"
为了完整,ripgrep版本如下:
rg --files-without-match "pattern"
你可以结合文件类型和搜索路径,例如:
rg --files-without-match -t ruby "frozen_string_literal: true" app/
推荐文章
- 如何在Android工作室添加“libs”文件夹?
- 在Python中提取文件路径(目录)的一部分
- Crontab -在目录中运行
- 如何将字典保存到文件?
- 如何上传文件与python请求?
- 如何在bash脚本中检查文件名的扩展名?
- Windows递归grep命令行
- 如何可靠地打开与当前运行脚本在同一目录下的文件
- 我怎么能得到'查找'忽略。svn目录?
- 将列表的Python列表写入csv文件
- Visual Studio单击“查找结果”在错误的窗口中打开代码
- 如何使用Bash创建一个文件夹,如果它还不存在?
- 不能与文件列表一起使用forEach
- python方式检查文件是否存在?
- BAT文件执行后保持CMD打开