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

grep -lv 'foo' file

file被输出。为什么会发生这种事,我该怎么办?

最佳答案

-v表示匹配任何与模式不匹配的行。所以-lv意味着列出任何包含与模式不匹配的行的文件。这与没有一行与模式匹配的文件不同。
使用-L选项列出与模式不匹配的所有文件。

grep -L 'foo' file

-L, --files-without-match
禁止正常输出;而是打印通常不会打印输出的每个输入文件的名称。这个
扫描将在第一次匹配时停止。
不要用-v这个。-L已经反转列出的文件,并且-v反转行的匹配方式,因此-Lv-l相同。

关于linux - 为什么grep -lv不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45697827/

10-12 17:10