Unix 发现不尊重正则表达式

Unix find not respecting regex

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

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

所以这会找到 syslogsyslog.1syslog.999 等并跳过 gzip 日志,如 syslog.1.gz 或任何其他与上述模式不匹配的日志系统日志。我也在做一个非常基本的查找命令:

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

然而,我总是得到一个空的结果!现在,我认为我写的正则表达式是 POSIX-extended compatible,但它似乎并非如此。以下是命令 I 运行 的变体,但无济于事:

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 ".*"

我做错了什么?

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

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

适合我。