grep list invert

10 浏览
0 Comments

grep list invert

如果文件中不包含字符串,我该如何打印文件名?

grep -vl '字符串' 文件

总是打印文件,我猜这是因为每个文件至少有一行不是字符串

$ ls
one  two  three  four  five
$ grep -l '奇数' *
one
three
five
$ grep -lv '奇数' *
one
two
three
four
five

但是我希望它打印第一个选项的相反结果

two
four

0
0 Comments

grep命令中的`-L`选项用于查找不包含指定模式的文件,并打印出这些文件的文件名。根据grep文档的说明,这个选项会抑制正常的输出,而是打印出每个输入文件的文件名,这些文件中通常不会打印输出。在每个文件中,一旦找到第一个匹配项,扫描就会停止。

在给定的示例中,使用了以下命令:

grep -L 'odd' *

这个命令的作用是在当前目录下的所有文件中查找不包含字符串"odd"的文件,并打印出这些文件的文件名。结果显示了两个文件名:`four`和`two`。

这个问题的出现原因是因为在使用grep命令时,希望找到不包含指定模式的文件,但是输出结果中却包含了包含指定模式的文件。这可能会导致用户无法准确地知道哪些文件不包含指定模式。

要解决这个问题,可以使用`-v`或`--invert-match`选项。这个选项会反转匹配的结果,即打印出包含指定模式的文件,而不是不包含指定模式的文件。下面是使用`-v`选项的示例命令:

grep -v 'odd' *

这个命令会在当前目录下的所有文件中查找包含字符串"odd"的文件,并打印出这些文件的文件名。这样,用户就能准确地知道哪些文件包含指定模式。

总结起来,使用`grep -L`命令时,出现输出结果中包含了包含指定模式的文件的问题。解决方法是使用`grep -v`命令,并指定要查找的模式,以打印出包含指定模式的文件。

0