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

あなたの質問(IMHO)はで最もよく解決されますが、awkあなたのコマンドに1つの問題を指摘したいと思います。

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

word2.txt2回の呼び出しでファイルの内容をフィルタリングするには、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、BSD、awkおよび過去の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)すべてのスクリプトの文字にaを追加しますéが、同じ母音は除くα)、数字、アンダースコア)。

関連情報