このディレクトリに
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]*
a
a
grep
non で始まる行の場合は、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
すべての項目と一致します。-w
GNUオプションはgrep
一致する単語を単語に制限します。この-o
オプションを使用するにはgrep
、各行の一致部分のみを抽出する必要があります。