查找所有不匹配的文件的最佳方法是什么?
What is the best way to find all the files that do not have a match?
我有一个大型应用程序,我需要查找不包含表达式的文件列表。
我一直在使用 The Silver Searcher 但我不确定如何得到相反的结果
例子
ag 'breadcrumbs' app/controllers
这给出了所有文件的列表和行号,我可以在控制器的目录中找到这个表达式
我想要得到的是所有没有breadcrumbs
的文件的列表
我也对 bash 或 shell 脚本持开放态度
感谢您的帮助
使用grep -vl
:
find myprojectroot -type f | xargs grep -vl breadcrumbs
grep
使用正则表达式搜索文件,但纯文本也可以。
-v
仅在 未找到 时匹配
-l
列出文件(而不是每个匹配项)
xargs
执行命令,传递命令上的每一行
find X -type f
查找名为 X 的目录中或目录下的所有文件(-type d
查找您不需要的目录)
对于 The Silver Searcher (ag
),ag -vl breadcrumbs directory_here
将满足您的需求。
-l
列出文件,-v
反转匹配以查找不匹配的文件。
你也可以ag -L breadcrumbs directory_here
-L
列出所有不包含匹配项的文件。
使用递归 grep
和 sed
我们可以这样做:
grep -cr <pattern> <directory> | sed -n s/:0$//p
说明:grep
的 -c
选项将导致它发出匹配的文件名以及用冒号分隔的匹配项数。因此,不匹配的文件的名称带有 :0
.
后缀
在管道的下一阶段,我们使用sed
。 -n
选项告诉它不要打印所有通过它的行,这意味着只有那些我们告诉它的行才会打印。我们使用 sed
的 s
命令编辑以 :0
结尾的行以删除该后缀。同时,我们添加 p
命令来打印这些匹配行。
我有一个大型应用程序,我需要查找不包含表达式的文件列表。 我一直在使用 The Silver Searcher 但我不确定如何得到相反的结果
例子
ag 'breadcrumbs' app/controllers
这给出了所有文件的列表和行号,我可以在控制器的目录中找到这个表达式
我想要得到的是所有没有breadcrumbs
我也对 bash 或 shell 脚本持开放态度
感谢您的帮助
使用grep -vl
:
find myprojectroot -type f | xargs grep -vl breadcrumbs
grep
使用正则表达式搜索文件,但纯文本也可以。
-v
仅在 未找到 时匹配
-l
列出文件(而不是每个匹配项)
xargs
执行命令,传递命令上的每一行
find X -type f
查找名为 X 的目录中或目录下的所有文件(-type d
查找您不需要的目录)
对于 The Silver Searcher (ag
),ag -vl breadcrumbs directory_here
将满足您的需求。
-l
列出文件,-v
反转匹配以查找不匹配的文件。
你也可以ag -L breadcrumbs directory_here
-L
列出所有不包含匹配项的文件。
使用递归 grep
和 sed
我们可以这样做:
grep -cr <pattern> <directory> | sed -n s/:0$//p
说明:grep
的 -c
选项将导致它发出匹配的文件名以及用冒号分隔的匹配项数。因此,不匹配的文件的名称带有 :0
.
在管道的下一阶段,我们使用sed
。 -n
选项告诉它不要打印所有通过它的行,这意味着只有那些我们告诉它的行才会打印。我们使用 sed
的 s
命令编辑以 :0
结尾的行以删除该后缀。同时,我们添加 p
命令来打印这些匹配行。