見つけたecho file|grep fil*
失敗しますが、echo abcd|grep abc*
成功します。
わかりません、誰か説明してもらえますか?
あなたの例には2つの問題があります。
主なものは、*
が「任意の文字シーケンス」を意味するワイルドカードであるという点で、 正規表現 が グロブパターン と同じように機能すると想定していることです。正規表現では、*
は代わりに「前のアトムの任意の数」を意味するため、fil*
はf
の後にi
の後に0個以上のl
文字。意図した意味を得るには、grep fil.*
と言う必要があります。.
は「任意の1文字」を意味するため、.*
は「任意の文字シーケンス」を意味します。
それほど問題ではないのは、グロブルールの下で何かを意味する引用符で囲まれていない特殊文字を使用していることです。これは、シェルがそれらを解釈できることを意味します。ローカルディレクトリにグロブパターンfil*
またはabc*
に一致するファイルがある場合、 シェルはそれらを展開します なので、grep
は展開されたファイルを取得します意図したREではなく、パターンとしての名前。コマンドラインでこのような文字を使用する場合は、必ず引用符で囲んでください:echo file | grep 'fil.*'
。