周囲の単語との一致を見つけたい。私も早くしたいです。
私が得たものは次のとおりです:
grep -o -P '(\w+ ){0,n}match( \w+){0,m}'
n はフレーズの前の単語数、m はフレーズの後の単語数です。match は探しているフレーズです。
もっと早くそれを実行する方法はありますか?
例:
echo word1 word2 word3 123 word4 word5 word6 | grep -o -P '(\w+ ){0,2}123( \w+){0,2}'
=> word2 word3 123 word4 word5
.
答え1
(\w+ )
単語または単語の一部に一致します。つまり、grep
すべての単語のすべての文字を潜在的な一致の開始として扱います。あなたの例では、
word1
ord1
rd1
d1
1
成功した試合に進む前に( から開始word2
)。
単語全体を検索する場合は、パターンに単語の境界を含めることで、単語の途中の一致をすべて防ぐことができます。
grep -P '\<(\w+ ){0,2}123( \w+){0,2}\>'
123
これのもう 1 つの効果は、長い単語の中に出現する場合に一致を防ぐことです。
これにより、私の場合、時間が 100 分の 1 に短縮されました (テストケース: Ulysses で「me」という単語を検索)
「落とし穴」のセクションhttp://www.regular-expressions.info/examples.html正規表現が遅くなる原因について、良いヒントがいくつかあります。