每隔一段时间就会有一个答案(或评论)建议一起使用grep
's-v
和-l
switch 而不是 the -L
(尤其是当后者不可用时)。作者似乎相信它们是等价的。
那么,它们可以互换吗?IOW,是否grep -v -l
产生与grep -L
?相同的结果?
don*_*sti 10
不,它们不是等价的,因此结果几乎总是1不同。
让我们看看每个开关的作用:
‘-L’
‘--files-without-match’
Suppress normal output; instead print the name of each input file
from which no output would normally have been printed.
Run Code Online (Sandbox Code Playgroud)
这应该很简单:
grep -L 'pattern' ./*
打印不包含任何行匹配的每个文件的名称'pattern'
。
‘-v’
‘--invert-match’
Invert the sense of matching, to select non-matching lines.
Run Code Online (Sandbox Code Playgroud)
这也应该非常简单:
grep -v 'pattern' ./*
打印'pattern'
每个文件中不匹配的所有行。
‘-l’
‘--files-with-matches’
Suppress normal output; instead print the name of each input file
from which output would normally have been printed.
Run Code Online (Sandbox Code Playgroud)
再次,简单:
grep -l 'pattern' ./*
打印包含至少一行匹配的每个文件的名称'pattern'
。
现在,当组合-v
和时会发生什么-l
?它与 没有太大区别grep -l
,除了它选择不匹配的行,因此
grep -vl 'pattern' ./*
打印包含至少一行不匹配的每个文件的名称'pattern'
。
所以,注意区别:
grep -L
打印文件名唯一的,如果没有线匹配 'pattern'
grep -vl
打印文件名只有当至少有一个行不匹配 'pattern'
1:
基于上述,很容易看出这两个命令何时会产生相同的输出: -
当文件不为空并且所有行都匹配模式时 - 在这种情况下将没有输出
- 或者当文件是不为空且没有与模式匹配的行 - 在这种情况下,它将被列出
故事寓意:永远不要grep -vl
模仿grep -L
。
如果您grep
不支持-L
,这是模仿它的正确方法。
归档时间: |
|
查看次数: |
5680 次 |
最近记录: |