regex - 迭代 apache 2 日志文件名并使用 linux bash 比较数字

标签 regex linux bash apache

这是我的/var/www/apache2/log 文件夹中的日志示例-

./no_domain_access.log.7.gz
./no_domain_access.log.8.gz
./no_domain_access.log.9.gz
./no_domain_error.log.10.gz
./no_domain_error.log.11.gz
./no_domain_error.log.12.gz
./no_domain_error.log.13.gz
./no_domain_error.log.14.gz
./no_domain_error.log.15.gz
./no_domain_error.log.16.gz
./no_domain_error.log.17.gz
./no_domain_error.log.18.gz
./no_domain_error.log.19.gz
./no_domain_error.log.20.gz

一直到 50...

我想遍历这些文件并删除所有大于 5 的日志文件。

使用正则表达式语法可以让我选择匹配 [1-9] 或 {1,2} 模式中的数字,但这也会匹配我不想删除的日志文件(单个数字 1-5 日志我希望保留的文件)

如何只匹配数字大于 5 的文件名?

谢谢!

最佳答案

您可以为此使用 awk 一行代码:

printf '%s\n' *[0-9].gz | awk -F '.' '$(NF-1) >= 5'

此 awk 命令使用点作为字段分隔符并将 $(NF-1)(即扩展前的数字字段)与数字 5 进行比较。

要删除这些文件,请使用:

printf '%s\n' *[0-9].gz | awk -F '.' '$(NF-1) >= 5' | xargs rm

xargsawk 获取输入,而 rm 命令只是删除这些文件。

关于regex - 迭代 apache 2 日志文件名并使用 linux bash 比较数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46277019/

相关文章:

c++ - EFAULT 尝试发送字符时

java - 如何将日期删除为字符串格式?

c# - 正则表达式,从分隔字符串中删除重复路径

linux - Bash 脚本 : keep one line of local file in sync with remote file

linux - Bash循环遍历包括隐藏文件的目录

bash - 有没有办法枚举所有内部 docker 接口(interface)?

regex - 匹配备份文件 (`*~` )

regex - Perl 命令行替换 unicode

正则表达式匹配所有字符串,除了

android - Android 是如何执行权限的?