grepと正規表現を明確にする

grepと正規表現を明確にする

長さが 10 文字で、連続する 3 つの母音の部分文字列を含む単語のセット。これまで、これらのコマンドを試しました。

grep -E '^.{10}$'| grep 'a*.e*.i*.o*.u*' words2.txt
grep -E '^.{10}$&a*.e*.i*.o*.u*' words2.txt

OCRで抽出した入力データこのスクリーンショット:

unpernicious
unperspicuous
unpervious
unpious
unpiteous
unpiteously
unpiteousness
unplebeian
unplenteous
unportmanteaued
unportuous
unprecarious
unprecious
unprecocious
unpredacious
unpresumptuous
unpresumptuously
unpretentious
unpretentiously
unpretentiousness
unpromiscuous
unpropitious
unpropitiously
unpropitiousness
unpugnacious
unpunctilious
unquailed
unquailing
unquailingly
unqueen
unqueened
unqueening
unqueenlike
unqueenly
unquiescence
unquiescent
unquiescently
unquiet
unquietable
unquieted
unquieting
unquietly
unquietness
unquietude
unrapacious
unrebellious
unreligious
unreligiously
unreligiousness
unrighteous
unrighteously
unrighteousness
unsacrilegious
Unsagacious
unsalubrious
unsanctimonious
unsanctimoniously
unsanctimoniousness
unsanguineous
unsanguineously
unseditious
unseeable
unseeing

答え1

あなたの問題は(私見では)で解決した方が良いと思いますawkが、私はあなたのコマンドの問題を指摘します

grep -E '^.{10}$'| grep 'a*.e*.i*.o*.u*' words2.txt 

word2.txt両方の呼び出しを通じてファイルの内容をフィルタリングするにはgrep、次のようになります。

grep -E '^.{10}$' words2.txt | grep 'a*.e*.i*.o*.u*'

2番目のgrepパターンは となり[auoie]{3}

grep -E '^.{10}$' words2.txt | grep -E '[aouie]{3}'

最初の入力grepはファイルです。2番目の入力grepは最初の出力ですgrepないあなたのファイル。

POSIX を使用するawk(GNU の最新バージョンなどawk):

$ awk 'length == 10 && /[aouei]{3}/' words2.txt
unpervious
unplebeian
unportuous
unprecious
unquailing
unqueening
unquieting
unquietude

mawk、BSDawkおよび歴史的なPOSIX以前の実装では、正規表現ではawkサポートされていません。{n}ステファン・シャゼラスが指摘した

答え2

10 文字は正解ですが、3 つの母音を続けて見つけるには、グループを探します[AEIOU]

egrep '^.{10}$' | egrep -i '[AEIOU]{3}'

ホワイトスペースを拒否するには、これを使用します。

egrep '^[^ \t]{10}$' | egrep -i '[AEIOu]{3}'

答え3

1 語/行と仮定すると、次の操作を実行できます。

sed -nE '/^.{10}$/!d;/[aAeEiIoOuU]{3}/p' words.txt

答え4

grepPCRE サポートが組み込まれている場合:

grep -iPx '(?=.*[aeiou]{3}.*).{10}'

または:

grep -wiP '(?=\w*[aeiou]{3}\w*)\w{10}'

1行に1つではない単語を検索する(実装でサポートされている-o場合は追加してgrep、見つかった行全体ではなく一致する単語のみを印刷します)。言葉任意のシーケンスを意味する言葉文字 (文字 (ラテン文字のみ、発音区別符号なし。どの文字でも文字には を追加しますが、や(*UCP)などの母音はカバーされません)、数字、およびアンダースコア)。éα

関連情報