【问题标题】:grep with regular expressions won't see files带有正则表达式的 grep 不会看到文件
【发布时间】:2014-07-21 23:40:02
【问题描述】:

我在使用 grep 时经常遇到这些问题。好像有时它会无缘无故停止工作。 我在一个目录中有许多文件,比如: 汽车1、汽车2、汽车3...、汽车9.txt

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

为什么我在这里看不到个位数的文件?

【问题讨论】:

  • 如果你这样做ls car[0-9][0-9]*.txt会发生什么?
  • 同样的事情。没有找到文件:/

标签: unix command-line grep


【解决方案1】:

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 处理发生之后发生的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    相关资源
    最近更新 更多