連続子音を含まない単語を検索するためにgrepコマンドを使用する方法は?

連続子音を含まない単語を検索するためにgrepコマンドを使用する方法は?

grep -Ev '[^aeiouy]{2}'答えを提供する必要があります(各入力行にASCII小文字で構成される1つの単語のみが含まれていると仮定)。

しかし、これを行う方法はありますか-v

ベストアンサー1

正の一致のためには、子音がある場合は子音が後ろまたは前に来ていないことを確認し、各子音の前に初音または母音が続き、後ろに縦性または母音が来るかどうかを確認する必要があります。 。

だから:

v='[aeiouy]' c='[^aeiouy]'
grep -xE "($c?$v)*$c?"
$ grep -cxE "($c?$v)*$c?" /usr/share/dict/words
11353
$ grep -cvE "$c$c" /usr/share/dict/words
11353
$ diff -s <(grep -xE "($c?$v)*$c?" /usr/share/dict/words) <(grep -vE "$c{2}" /usr/share/dict/words)
Files /proc/self/fd/11 and /proc/self/fd/18 are identical

おすすめ記事