grep -lv为什么不工作?

时间:2017-08-15 17:04:37

标签: linux grep

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

grep -lv 'foo' file
输出

file。为什么会发生这种情况,我该怎么做才能解决它?

3 个答案:

答案 0 :(得分:5)

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

您正在寻找grep -L

grep -L 'foo' file

答案 1 :(得分:5)

-v表示匹配与模式不匹配的任何。因此-lv表示列出包含与模式不匹配的任何行的任何文件。这与行的 none 匹配模式的文件不同。

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

grep -L 'foo' file
  

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

请勿使用-v-L已经反映了列出的文件,-v颠倒了匹配行的方式,因此-Lv-l相同。

答案 2 :(得分:1)

你应该删除-v选项,因为这意味着它将省略任何行中给出的文本。所以你应该尝试:

grep -L 'foo' Input_file

另外,如果你想知道目录中有字符串(foo)的所有文件,那么你也可以尝试一下。

grep -L 'foo' /path/to/files/*.txt

grep -L的一个示例,它将打印所有包含字符串foo的.txt文件名。

编辑:如果您对awk解决方案感兴趣,也可以尝试关注。

awk 'val{close(val)} FNR==1{val=FILENAME} /Var/{;print FILENAME;nextfile}' *.txt