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