7

mac os 10.8 の grep のストック バージョン (バージョン情報: grep (BSD grep) 2.5.1-FreeBSD) は、行正規表現モード (-x) で実行されたときに、共通のプレフィックスを共有するパターンに問題があるようです。次の最小限の例では、grep が "test" と "test2" を報告することを期待しますが、代わりに "test" のみが報告されます。(ワード正規表現モード (-w) の場合も同様です)。

printf "test\ntest2\n" > f1.txt
printf "test\ntest2\n" > f2.txt
grep -x -F -f f1.txt f2.txt

他の誰かが同様の観察をしたか、回避策について知っていますか?

4

1 に答える 1

5

検証済み; これは Apple や FreeBSD の grep のバグのようです。(これは私にはまったく驚くべきことではありません。FreeBSD grep は標準を嫌ううんちの山です。私の雇用主は、FreeBSD の奇抜な動作に我慢するのではなく、すべての Mac システムに GNU grep をインストールします。そして、はい、GNU grep はあなたの例で両方の行を見つけます。 )

grepMac と Linux 間の移植性が目的である場合は、完全に放棄してperl(またはackに依存するのようなもの) を使用することを強くお勧めしperlます。

f2.txt で短いパターンの前に長いパターンを配置するという @akostadinov の提案は、バグを回避するように見えますが、そのようなものに依存することには慎重です。このおもちゃの例ではうまくいきますが、一般的にはうまくいきますか? また、わかったときにどれくらいの費用がかかりますか?

于 2013-03-14T23:24:33.960 に答える