web-dev-qa-db-ja.com

`grep fil *`が失敗するのはなぜですか?

見つけたecho file|grep fil*失敗しますが、echo abcd|grep abc*成功します。

わかりません、誰か説明してもらえますか?

9
tmpbin

あなたの例には2つの問題があります。

主なものは、*が「任意の文字シーケンス」を意味するワイルドカードであるという点で、 正規表現グロブパターン と同じように機能すると想定していることです。正規表現では、*は代わりに「前のアトムの任意の数」を意味するため、fil*fの後にiの後に0個以上のl文字。意図した意味を得るには、grep fil.*と言う必要があります。.は「任意の1文字」を意味するため、.*は「任意の文字シーケンス」を意味します。

それほど問題ではないのは、グロブルールの下で何かを意味する引用符で囲まれていない特殊文字を使用していることです。これは、シェルがそれらを解釈できることを意味します。ローカルディレクトリにグロブパターンfil*またはabc*に一致するファイルがある場合、 シェルはそれらを展開します なので、grepは展開されたファイルを取得します意図したREではなく、パターンとしての名前。コマンドラインでこのような文字を使用する場合は、必ず引用符で囲んでください:echo file | grep 'fil.*'

31
Warren Young