tmp*_*bin 9 shell grep quoting regular-expression wildcards
我发现echo file|grep fil*失败了,但echo abcd|grep abc*成功了。
没看懂,谁能解释一下?
War*_*ung 31
你的例子有两个问题。
主要的原因是您假设正则表达式的工作方式与glob 模式相同,因为它*是一个通配符,意思是“任何字符序列”。在正则表达式中,*表示“前一个原子的任意数量”,因此fil*表示f后跟i零个或多个l字符。您需要说grep fil.*以获得预期含义:.表示“任何单个字符,因此.*表示“任何字符序列”。
较小的问题是您使用了不带引号的特殊字符,这些字符在 glob 规则下意味着某些东西,这意味着 shell 可以解释它们。如果本地目录中有与 glob 模式匹配的任何文件fil*or abc*,shell 将展开它们,因此grep会将展开的文件名作为模式获取,而不是预期的 RE。每当您在命令行上使用此类字符时,都应该引用它们:echo file | grep 'fil.*'.