bash正規表現:アスタリスクはgrepを使用してあいまいな検索結果を提供します。

bash正規表現:アスタリスクはgrepを使用してあいまいな検索結果を提供します。

*私はgrepを介してメタ文字をテストするために単純なテキストファイルを使用しています。テキストファイルは次のとおりです。

1
11
111
1111
11111
111111

d
da
daa
daaa

b
bc
bcc
bccc

grepを使って数字1を検索すると、次のようになります。

grep 1* regex.txt

出力は次のとおりです

1
11
111
1111
11111
111111

d
da
daa
daaa

b
bc
bcc
bccc

文字「d」の場合でも、結果は赤色で強調表示された「d」と同じですが、文字「a」、「b」の場合は、次の検索コマンドは出力されません。

grep a* regex.txt
grep b* regex.txt

次のコマンドは、予想される出力を提供します。

grep "a*" regex.txt
grep "b*" regex.txt

なぜこれですか?bash「a」と「b」より文字「d」が好ましい理由

ベストアンサー1

これは引用されず、シェルによって拡張されるために発生しa*ますb*今後たとえば、次のディレクトリを考えてgrepみます。

$ ls    
afile.txt bfile.txt regex.txt

実行しようとするとgrep a* regex.txt検索モードにa*変わります。 bashのデバッグオプション()を使用して、次のことを説明できます。afile.txtgrepset -x

$ set -x
$ grep a* regex.txt
+ grep --color afile.txt regex.txt

dうまくいくがうまくいかないのaは、b現在のディレクトリに、およびで始まる名前のファイルまたはディレクトリがaあるためです。bそうしないと動作します。

$ ls
afile.txt bfile.txt regex.txt
$ grep a* regex.txt  ## no output, it's searching for 'afile.txt'
$ rm afile.txt       ## now there are no filenames starting with a
$ grep a* regex.txt
1
11
111
1111
11111
111111

d
da
daa
daaa

b
bc
bcc
bccc

これを防ぐためにいつも検索パターンの引用:

grep "a*" regex.txt

または

grep 'a*' regex.txt

おすすめ記事