正規表現 grep ^[^a]*$

正規表現 grep ^[^a]*$

このディレクトリに

mael@mael-HP:~/repertoireVide$ 

violonとavionという単語を含むMySQLServeというファイル。

mael@mael-HP:~/repertoireVide$ cat MySQLServ
violon avion

このgrepコマンドが現在のディレクトリに適用されるのはなぜですか?

$ grep -r  ^[^a]*$

$ grep -r  '^[^a]*$'

何の出力も提供していませんか?

[^a] の後の ^ は検索から省略する必要がありますavionが、引数の *$ 部分は可能な終りのある別の単語を許可する必要があります。ここではなぜviolon除外されたのですか?

ありがとうございます。

ベストアンサー1

^[^a]*$正規表現(2回目の試行では一重引用符で囲む必要があります)このa文字以外の項目(または空白行)のみが含まれている行と一致し、テキスト文字列が空でないため、結果は得られませんa

この場合、*前の式に対して機能します。ゼロ個以上の非文字と一致します。式を行の先頭と末尾に固定したので、文字を含むすべての行は拒否されます。[^a][^a]*aa

grepnon で始まる行の場合は、a次を使用します。

grep -r '^[^a]' .

行全体を明示的に一致させる必要はありませんが、そうするには次のようにします。

grep -r '^[^a].*$' .

.*0個以上一致どの文字(含むa)。

また、出力に空白行が表示されます(明らかに始まらないa)。

grep -r -v '^a' .

つまり、a行の先頭でanを一致させ、一致の意味を逆に置き換えます-v。これを行うには、1行に文字をまったく含めないでください(一致するには少なくとも[^a]1つの文字が必要です)。文字がある場合は、最初の文字ではないはずですa

検索する性格で始まらずに、a次を使用してください。

grep -r -w -o '[^a][[:alpha:]]*' .

この式は、ゼロ個以上のアルファベット以外の文字で始まり、続くaすべての項目と一致します。-wGNUオプションはgrep一致する単語を単語に制限します。この-oオプションを使用するにはgrep、各行の一致部分のみを抽出する必要があります。

おすすめ記事