コマンドが与えられたら、子音で始まり、母音だけに続くファイルをgrepします。

コマンドが与えられたら、子音で始まり、母音だけに続くファイルをgrepします。

私は何をすべきかわかりません。 ~しようとする

egrep -i ^[^aeiou] [aeiou]$ /usr/share/dict/words

しかし、これはまったく機能しません。私は何が間違っていましたか?

答え1

シェルで式を引用する必要があります。

grep -i '^[^aeiou][aeiou]*$' /usr/share/dict/words

そうしないと、パターンが現在のディレクトリにあるファイル名に拡張される可能性があります。また、パターンの2つの部分の間にスペースを挿入したため、grep2番目の部分は検索する必要があるファイル名と見なされます(「該当するファイルまたはディレクトリなし」エラーが発生します)。

ファイル/usr/share/dict/wordsには1行に1つの単語があるため、-x必要に応じて式でアンカーを使用または削除できます。

grep -ix '[^aeiou][aeiou]*' /usr/share/dict/words

を使用すると、-x行全体grepに一致する項目のみが返されます。

もしあなたなら必要[aeiou]*コレクション(上記は空の文字列と一致するため、単一の子音単語を返すことができます):

grep -ix '[^aeiou][aeiou][aeiou]*' /usr/share/dict/words

または

grep -Eix '[^aeiou][aeiou]+' /usr/share/dict/words

答え2

以下を行う必要があります。

  1. 正規表現の引用
  2. 間のスペースを削除します(検索されます)
  3. +1つ以上のコレクションに一致するようにaを追加します(正規表現の機能egrep)。

努力する:

egrep -i '^[^aeiou][aeiou]+$' /usr/share/dict/words

関連情報