Unix 发现不尊重正则表达式
Unix find not respecting regex
我正在尝试在我的 /var/log
目录中执行一个简单的 find
以查找所有未压缩的系统日志文件。到目前为止我所拥有的是正则表达式:
syslog(\.[0-9]*)?$
所以这会找到 syslog
、syslog.1
、syslog.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]*)?'
适合我。
我正在尝试在我的 /var/log
目录中执行一个简单的 find
以查找所有未压缩的系统日志文件。到目前为止我所拥有的是正则表达式:
syslog(\.[0-9]*)?$
所以这会找到 syslog
、syslog.1
、syslog.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]*)?'
适合我。