grepを使用してファイル内の5つのコレクションを連続して表示するには?

grepを使用してファイル内の5つのコレクションを連続して表示するには?

私はこれを試しましたが、うまくいきません。文字リストのみを返します。

grep  ?*\[aeiouAEIOU]\{5\}?* words

答え1

5つのコレクションが連続して含まれている行を表示したいとします。

grep  "[aeiouAEIOU]\{5\}" words

\あなたがする必要はありません。私はsが何であるか[わかりません。そしてシェルがsとsを?*解釈するのを防ぐために、それを引用する必要があります。*?

答え2

grep -o -E '[aeiouAEIOU]{5}' words

問題は、構文のアスタリスクがシェルによって拡張されたファイル名で、grepがこれを見ることができず、開かれた括弧はエスケープされたが、一致する閉じ括弧はエスケープしなかったことです。しかし、もっと単純な構文がありますが、なぜ複雑な構文を使用するのですか?

答え3

見せるただコレクションが5つある場合は、スイッチを使用してください-o

このスイッチを使用する-Eと、中かっこを直接(エスケープしない)使用できます。

大文字と小文字を区別しない場合は、-iスイッチを使用できます。

例えば

echo "AKAAJEJEaeiooXXX" | grep -Eio '[aeiou]{5}'

Eaeioが表示されます。 -o スイッチがない場合、すべての行が出力されます。

5つのコレクション(つまり6つではない)を含む行のみを表示するには、5つのコレクションが他のコレクションと接触しないように指定する必要があります。そして、行の始まりや終わりが当たる境界線ケースを管理します。

grep -Ei '([^aeiou]|^)[aeiou]{5}([^aeiou]|$)'

「一致しない」境界が現在検出されたパターンの一部であるため、-oスイッチを使用することが防止されます。そのスイッチを使用して、5 つのコレクションを含む 2 番目の grep にパイプすることで、出力をさらに具体化できます。

関連情報