无法使用日志轮换从选定的日志文件中搜索字符串
Posted
技术标签:
【中文标题】无法使用日志轮换从选定的日志文件中搜索字符串【英文标题】:Unable to search string from selected log files with log rotation 【发布时间】:2020-01-02 21:40:33 【问题描述】:我有这种模式的日志文件 -
/mnt/internal-app/logs/internal-app.log_2019-08-20.log.gz
/mnt/internal-app/logs/internal-app.log_2019-08-21.log.gz
..
..
/mnt/internal-app/logs/internal-app.log_2019-08-25.log.gz
..
我想从某个日期范围内获取文件中某些文本的出现次数 - 例如20 到 21。
虽然以下对我有用,但要在 20 秒的整个范围内获取文件的出现 -
zgrep "search text" /mnt/internal-app/logs/internal-app.log_2019-08-23*
试图只在 20 到 21 的范围内,我尝试了中给出的解决方案 我读了https://***.com/a/17000211/351903
为了使基本的正则表达式正常工作,我尝试了以下方法,但它没有给我任何结果 -
find . -regex "/mnt/internal-app/logs/internal-app.log_2019-08-23.*" -exec grep 'search text' +
【问题讨论】:
假设您实际上有 8 月 23 日的数据,那么您可能需要像这样\/
转义正斜杠
【参考方案1】:
您可以使用character class 更新您的模式以匹配 0 或 1:
/mnt/internal-app/logs/internal-app\.log_2019-08-2[01].*
Regex demo
【讨论】:
【参考方案2】:除了@第四只鸟的回答
shell 允许以下匹配模式
[tmp]$ ls internal-app.log_2019-08-2[0123].log.gz
internal-app.log_2019-08-20.log.gz internal-app.log_2019-08-22.log.gz
internal-app.log_2019-08-21.log.gz internal-app.log_2019-08-23.log.gz
[tmp]$ ls internal-app.log_2019-08-20,1,2,3.log.gz
internal-app.log_2019-08-20.log.gz internal-app.log_2019-08-22.log.gz
internal-app.log_2019-08-21.log.gz internal-app.log_2019-08-23.log.gz
[tmp]$ ls internal-app.log_2019-08-20,23.log.gz
internal-app.log_2019-08-20.log.gz internal-app.log_2019-08-23.log.gz
在 shell 文件名匹配和 pcre 正则表达式之间有不同的行为
在这种情况下,我想说使用 internal-app.log_2019-08-19,20.log.gz
会更容易、更准确
除了internal-app.log_2019-08-[12][09].log.gz
【讨论】:
以上是关于无法使用日志轮换从选定的日志文件中搜索字符串的主要内容,如果未能解决你的问题,请参考以下文章