grep -v -f /dev/null 到底要做什么?

grep -v -f /dev/null 到底要做什么?

理论: grep -f somefilegrep --file=somefile将找到与 中列出的模式之一匹配的所有行somefile。如果somefile为空,则没有任何内容匹配。与grep -v您一起列出以下行不要匹配。

底线: grep -f /dev/null什么都不匹配,又grep -v -f /dev/null什么都匹配。

实验:现在尝试一下

% echo blank | grep -f /dev/null
% echo bingo | grep -v -f /dev/null
bingo

结果:事实上,我确实bingo在一台机器上得到了(而且仅此而已)

unix1% grep --version
grep (GNU grep) 2.20

我不明白bingo!?!?在另一台机器上,这次是

unix2% grep --version
grep (BSD grep) 2.5.1-FreeBSD
unix2% uname -rs
Darwin 14.0.0

问题:规格上还有余地吗grep?我错过了一些法律术语吗?或者是grep (BSD grep) 2.5.1-FreeBSD越野车?可以肯定的是,我花了两个小时才发现将脚本从 unix1 移植到 unix2 时出了什么问题......

答案1

来自 GNU grep 手册页:

-f FILE, --file=FILE
       Obtain  patterns  from  FILE,  one  per  line.   The  empty file
       contains zero patterns, and therefore matches nothing.   (-f  is
       specified by POSIX.)
-v, --invert-match
       Invert the sense of matching, to select non-matching lines.  (-v
       is specified by POSIX.)

所以grep -f /dev/null会匹配没有什么并将grep -v -f /dev/null其反转并匹配一切

我可以访问大量的 FreeBSD 系统,但是全部他们中的一些人安装了 GNU grep 因为它好得多(都用于速度和功能,尽管看起来确实如此BSD grep 正在迎头赶上)。仍然存在差异,例如单词边界

我怀疑这是一个 BSD grep 错误,尽管规范可能不明确。来自“追赶”链接的注释:BSD grep 基本上是为了获得 GNU grep 的更宽松许可的克隆,这意味着它至少在某些方面永远“落后”。

如果可能,我建议在使用 BSD grep 的系统上安装 GNU grep。

如果你只是想让你的代码最大程度地可移植,我想我会接着问为什么你什么都没有。你到底想达到什么目的?也许集中精力更好。

相关内容