grep -v -f /dev/nullは正確に何をしますか?

grep -v -f /dev/nullは正確に何をしますか?

理論: grep -f somefileまたは、grep --file=somefileにリストされているパターンの1つと一致するすべての行を見つけます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

結果:実際、私は1台の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にスクリプトを移植するときに何が間違っているのかを調べるのに2時間かかりました...

ベストアンサー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をインストールすることをお勧めします。

コードをできるだけ移植可能にしたい場合は、なぜ何もないのか尋ねます。正確に何を達成しようとしていますか?集中する方が良いかもしれません。

おすすめ記事