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

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

私はecho file|grep fil*失敗を発見しましたが、echo abcd|grep abc*成功しました。

わかりませんが、誰が説明できますか?

答え1

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

最初はあなたの家です一般的な表現作業方法グローバルモードこれには、*「すべての文字シーケンス」を意味するワイルドカードがあります。正規表現は*「前の原子の数」を意味するので、後にゼロ個以上の文字がfil*続くことを意味します。意図した意味を得るためには、次のように話す必要があります。 「すべての単一文字、つまり「すべての文字シーケンス」」を意味します。filgrep fil.*..*

より小さな問題は、引用符なしで使用する特殊文字がグローバルルールの意味を意味するため、シェルがそれを解釈できることです。ローカルディレクトリfil*またはにglobパターンと一致するファイルがあるabc*場合シェルはそれを拡張します。grep期待されるREの代わりに拡張ファイル名をパターンとして使用します。コマンドラインでこれらの文字を使用するたびに、引用符で囲む必要がありますecho file | grep 'fil.*'

関連情報