【问题标题】:Unix find not respecting regexUnix 发现不尊重正则表达式
【发布时间】:2016-12-20 02:13:38
【问题描述】:

我正在尝试在我的/var/log 目录中执行一个简单的find 来查找所有未压缩的系统日志文件。到目前为止,我所拥有的是正则表达式:

syslog(\.[0-9]*)?$

因此,这将找到 syslogsyslog.1syslog.999 等,并跳过像 syslog.1.gz 这样的压缩日志或与上述系统日志的模式不匹配的任何其他内容。我也在做一个非常基本的查找命令:

find /var/log -regextype posix-extended -regex "syslog(\\.[0-9]*)?$"

但是,我总是得到一个空的结果!现在,我认为我编写的正则表达式与 POSIX 扩展兼容,但似乎并非如此。以下是我运行的命令的变体,但无济于事:

find /var/log -regextype posix-extended -regex "syslog(\\.[0-9]*)?$"

sudo find /var/log -regextype posix-extended -regex "syslog(\\.[0-9]*)?$"

find /var/log -regextype posix-extended -regex "syslog"

find /var/log -regextype posix-extended -regex "(syslog)"

通过列出目录中的所有文件,以下内容按预期工作,但是,所以我知道我的命令格式是正确的。

find /var/log -regextype posix-extended -regex ".*"

我做错了什么?

【问题讨论】:

    标签: regex linux unix find posix-ere


    【解决方案1】:

    您提供的正则表达式模式需要匹配整个路径。这意味着您不需要在开头和结尾锚定^$,它已经隐式锚定在两端。但是您确实需要提供前导 .* 或类似的东西,如果您的模式的其余部分应该匹配开头以外的某个位置(请记住,find 路径总是包含一个目录,即使它是.)。

    find . -regextype posix-extended -regex '.*syslog(\.[0-9]*)?'
    

    为我工作。

    【讨论】:

    • 啊,我不知道你不能进行部分匹配。谢谢!接受。
    猜你喜欢
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2019-12-22
    相关资源
    最近更新 更多