grep - 文字列で正確に3つのaを見つける正規表現

grep - 文字列で正確に3つのaを見つける正規表現

正規表現が/usr/share/dict/wordsに含まれる単語と一致するように、次のコマンドを変更したいと思います。正確に代わりに3a少なくとも3時

cat /usr/share/dict/words | grep "a.*a.*a" | grep -v "'s$" | wc -l

どうすればいいですか?

ベストアンサー1

(すべての文字と一致)の代わりに(を[^a]除くすべての文字と一致)を使用する方法は次のとおりです。a.

$ grep -E '^([^a]*a){3}[^a]*$' /usr/share/dict/cracklib-small | shuf -n 4
areaway
humanitarian
capitalizations
autonavigator

このように正規表現を作成して^[^a]*(a[^a]*){3}$同じ結果を得ることもできます。

また、異なる数のaが必要な場合、^[^a]*a[^a]*a[^a]*a[^a]*$サイズ変更は行われません。パフォーマンスははるかに優れていますが、ギガバイトのデータを処理しない限り特に問題はありません。

^正規表現とアンカー演算子を明示的に使用するのではなく、暗黙的にこれを行うオプションを使用することもできます。大文字と小文字を区別しない一致オプションも参照してください(ロケールによって異なります)。$-x-i

grep -xiE '([^a]*a){3}[^a]*'

おすすめ記事