0

我有这种模式的日志文件 -

/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' {} +
4

2 回答 2

1

您可以使用字符类更新您的模式以匹配 0 或 1 :

/mnt/internal-app/logs/internal-app\.log_2019-08-2[01].*

正则表达式演示

于 2019-08-29T15:12:19.793 回答
1

除了@第四只鸟发布的答案

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

于 2019-08-29T15:31:37.433 回答