使用正则表达式的grep将不会看到文件

时间:2014-07-21 23:40:03

标签: unix command-line grep

我经常遇到grep这些问题。好像有时它会在没有明显原因的情况下停止工作。 我在目录中有许多文件,例如: car1,car2,car3 ...,car9.txt

当我输入egrep“blabla”car [0-9] [0-9] * .txt时,我得到:“没有这样的文件或目录” “+”符号也会发生同样的事情。

为什么我在这里看不到单个数字文件?

1 个答案:

答案 0 :(得分:2)

shell将wildcard expansion应用于命令行,而不是正则表达式。有关详细信息,另请参阅man 7 glob

因此,*表示"零个或多个(任意)字符"但是意味着" 之前的实体中的零个或多个"因此不适用于[0-9],所以你要搜索的是:

"car" [any of 0-9] [any of 0-9] (zero or more of any chars) ".txt"

找不到任何一位数的文件名。

要查找单位数文件,请使用:

egrep "blabla" car[0-9].txt

要查找单位数文件或两位数,请使用:

egrep "blabla" car[0-9].txt car[0-9][0-9].txt

或尝试以下方法:

egrep "blabla" car[0-9]*.txt

它可以捕获的不仅仅是car [any digits] .txt,但它是一种近似值,在这种情况下可能有效,具体取决于目录的其他内容。

请注意,grep将正则表达式匹配应用于参数,在本例中为"blabla"但在shell处理发生后会发生这种情况。