正規表現が/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]*'