Linux 为什么';t grep-lv工作?

Linux 为什么';t grep-lv工作?,linux,grep,Linux,Grep,当且仅当文件不包含字符串foo时,我想打印文件名。但是,如果文件包含foo,并且我运行这个 grep -lv 'foo' file 文件被输出。为什么会发生这种情况?我可以做些什么来解决它?grep-lv的意思是:列出每个包含不匹配行的文件 您正在寻找grep-L grep -L 'foo' file -v表示匹配与图案不匹配的任何线条。因此-lv意味着列出包含与模式不匹配的任何行的任何文件。这与没有一行与模式匹配的文件不同 grep -L 'foo' file 使用-L选项列出与模式不匹

当且仅当文件不包含字符串
foo
时,我想打印文件名。但是,如果
文件
包含
foo
,并且我运行这个

grep -lv 'foo' file

文件
被输出。为什么会发生这种情况?我可以做些什么来解决它?

grep-lv
的意思是:列出每个包含不匹配行的文件

您正在寻找
grep-L

grep -L 'foo' file

-v
表示匹配与图案不匹配的任何线条。因此
-lv
意味着列出包含与模式不匹配的任何行的任何文件。这与没有一行与模式匹配的文件不同

grep -L 'foo' file
使用
-L
选项列出与模式不匹配的所有文件

grep -L 'foo' file
-L,--不匹配的文件

抑制正常输出;而是打印通常不会打印输出的每个输入文件的名称。这个 扫描将在第一次匹配时停止


不要将
-v
与此一起使用
-L
已经反转列出的文件,而
-v
反转行匹配的方式,因此
-Lv
-L
相同。您应该删除-v选项,因为这意味着它将忽略任何行中给出的文本。所以你应该试试:

grep -L 'foo' Input_file
另外,如果您想知道目录中有字符串(foo)的所有文件,那么您也可以尝试以下操作

grep -L 'foo' /path/to/files/*.txt
awk 'val{close(val)} FNR==1{val=FILENAME} /Var/{;print FILENAME;nextfile}' *.txt
grep-L的一个示例,其中它将打印所有包含字符串foo的.txt文件名

编辑:如果您对awk解决方案感兴趣,也可以尝试以下内容

grep -L 'foo' /path/to/files/*.txt
awk 'val{close(val)} FNR==1{val=FILENAME} /Var/{;print FILENAME;nextfile}' *.txt

grep-Lv'foo'文件
似乎没有输出任何内容,即使
文件
不包含
foo
flag@JamesKo
-v
正在撤消
-L
的行为。好的,我明白了。感谢大家的澄清。更新了答案。