【问题标题】: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://stackoverflow.com/a/17000211/351903

为了使基本的正则表达式正常工作,我尝试了以下方法,但它没有给我任何结果 -

find . -regex "/mnt/internal-app/logs/internal-app.log_2019-08-23.*" -exec grep 'search text' {} +

【问题讨论】:

  • 假设您实际上有 8 月 23 日的数据,那么您可能需要像这样\/ 转义正斜杠

标签: regex log-rotation


【解决方案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-2{0,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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      • 2020-07-17
      • 2011-11-19
      • 2017-09-10
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      相关资源
      最近更新 更多