Answers:
您的示例有两个问题。
主要的一个假设是,您假设正则表达式与glob模式的工作方式相同,因为它*
是一个通配符,表示“任何字符序列”。在正则表达式中,*
表示“任意数量的前一个原子”,因此fil*
表示f
后跟i
零个或多个l
字符。您需要说出grep fil.*
其预期的含义:.
意思是“任何单个字符,所以.*
意思是“任何字符序列”。
较小的问题是,您正在使用未加引号的特殊字符,这些特殊字符表示在glob规则下的某些内容,这意味着shell可以解释它们。如果您在本地目录中有任何文件匹配glob模式fil*
或abc*
,shell将对其进行扩展,因此grep
将获得扩展的文件名作为模式,而不是预期的RE。每当您在命令行上使用此类字符时,都应引用它们:echo file | grep 'fil.*'
。
echo file|grep fil*
用fil
e 回答。