grep -lv为什么不工作?

Jam*_* Ko 0 linux grep

我想打印出文件的名称,当且仅当它不包含字符串时foo.但是,如果file包含foo和我运行它

grep -lv 'foo' file
Run Code Online (Sandbox Code Playgroud)

file 输出.为什么会发生这种情况,我该怎么做才能解决这个问题?

o11*_*11c 5

grep -lv 表示:列出包含不匹配行的每个文件.

你在找grep -L.

grep -L 'foo' file
Run Code Online (Sandbox Code Playgroud)


Bar*_*mar 5

-v意味着匹配任何与模式不匹配的.因此,-lv意味着列出包含与模式不匹配的任何行的任何文件.这与没有任何一行与模式匹配的文件不同.

使用该-L选项列出与模式没有任何匹配的所有文件.

grep -L 'foo' file
Run Code Online (Sandbox Code Playgroud)

-L, --files-without-match
抑制正常输出; 而是打印每个输入文件的名称,通常不会打印输出.扫描将在第一场比赛中停止.

不要-v用这个.-L已经反转列出了哪些文件,并-v反转了行匹配的方式,因此-Lv也是如此-l.