私はデバッグできないgrepに問題があります。これはMac OS High Sierraで再現可能ですが、問題は現在のUbuntuでは発生しません(期待通りに動作します)。MacOS 10.13のパターンファイルを使用したgrepの回避策
私は三つのファイルがあります:あなたがして、これらの3つのファイルを作成することができます
cat haystack
apple
aardvark
cow
cat pattern1
a
aardvark
animal
cat pattern2
c
b
apple
を:
perl -e 'print "a\naardvark\nanimal"' > pattern1;
perl -e 'print "c\nb\napple"' > pattern2;
perl -e 'print "apple\naardvark\ncow"' > haystack;
は、ここで問題です:これは予想される応答が得られます。
grep -iowFf pattern2 haystack
apple
説明するために、 、grep ...
-i = case insensitive
-o = display the match
-w = word match <== this is the option which is breaking it
The expression is searched for as a word (as if surrounded by `[[:<:]]' and `[[:>:]]'
-F = fast grep (fixed strings)
-f = read pattern from file
これは何も返しません:
grep -iowFf pattern1 haystack
しかし、私は "pattern1
" "aardvark
" を返すことを期待します。
私はこの小さなテストベッドで実験していましたが、実際のプロジェクトははるかに大きくなっています。そして、私がpatternN
ファイル内の行のシーケンスを変更すると結果が変わることがわかりました。 "aardvark
"
を返し
sort -r pattern1 > pattern1.reverse
grep -iowFf pattern1.reverse haystack
私は何をしないのですか?私はこれについて私の頭を叩いています。 MacOS 10.13のバグですか?回避策はありますか? (私のパターンでは-wパラメータを\ b .... \ bに置き換え、-Fはオフにしますが、非常に大きなファイルを処理していますので、パフォーマンスが必要です)。