私はecho file|grep fil*
失敗を発見しましたが、echo abcd|grep abc*
成功しました。
わかりませんが、誰が説明できますか?
答え1
あなたの例には2つの問題があります。
最初はあなたの家です一般的な表現作業方法グローバルモードこれには、*
「すべての文字シーケンス」を意味するワイルドカードがあります。正規表現は*
「前の原子の数」を意味するので、後にゼロ個以上の文字がfil*
続くことを意味します。意図した意味を得るためには、次のように話す必要があります。 「すべての単一文字、つまり「すべての文字シーケンス」」を意味します。f
i
l
grep fil.*
.
.*
より小さな問題は、引用符なしで使用する特殊文字がグローバルルールの意味を意味するため、シェルがそれを解釈できることです。ローカルディレクトリfil*
またはにglobパターンと一致するファイルがあるabc*
場合シェルはそれを拡張します。、grep
期待されるREの代わりに拡張ファイル名をパターンとして使用します。コマンドラインでこれらの文字を使用するたびに、引用符で囲む必要がありますecho file | grep 'fil.*'
。