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}ステファン・チャゼラスは次のように指摘しています。

おすすめ記事