grep 如何抑制显示不匹配的文件?

grep 如何抑制显示不匹配的文件?

我正在尝试使用 查找包含特定单词的文件grep。目录下文件较多(>500)

我运行的命令

$ grep 'delete' *

输出

validate_data_stage1:0
validate_data_stage2:0
validate_data_stage3:0
validate_data_stage4:0
validate_data_stage5:0
validate_input_stage1:0
validate_input_stage2:0
validate_input_stage3:0
validate_input_stage4:0
.... and hundred of such lines

这些是不包含给定匹配项的文件。我想禁止这些行显示到标准输出。我知道-qswitch,但这会抑制完整的输出,这是我不想要的。

我怎么做?

答案1

添加

| grep -v ':0$'

不是很优雅,但我认为可以完成这项工作。

添加-l到您的命令只会为您提供匹配项,但它也会抑制打印每个文件的匹配项数。

答案2

使用grep -l您只会获得包含至少一个匹配项的文件。

您是否需要有关文件中有多少匹配项的信息?因为您可以跳过使用-cwhich来计算文件中的匹配数。

编辑:就像术士所说,使用-I抑制二进制文件中的匹配也可能是一个好主意。

答案3

这就是 所表现出的行为grep -c

也许您有一个名称以字符开头-并包含一个c字符的文件,并且您正在使用 GNU grep 而不设置POSIXLY_CORRECT环境变量。

使用:

grep -- delete *

或更好:

grep delete ./*

--标记选项的结尾,以便该文件名不会被视为选项(使用 POSIX grep,则不会,因为非选项delete参数会标记选项的结尾),但它不会解决以下问题一个名为-.它grep delete ./*更强大,但缺点是输出./匹配文件的额外内容(尽管这可能被认为是一个好处,因为这有助于识别包含换行符的文件名)。

答案4

与 Laurentiu 的答案类似,您还可以使用列表-l作为 grep 的文件输入:
grep -r "pattern" -c $(grep -rl "pattern")
它允许保留 grep 的颜色,但在后台执行相同的操作

相关内容