我在获取一堆gzip压缩apache访问日志文件中的行列表时遇到问题。我想要的是获取仅编号为1和2的日志文件列表,然后通过它们grep并提取具有特定匹配文本的行。
我最初只是为了编号为1的访问日志档案而工作。“/ pathname”文本是我正在寻找的文本:
zgrep /pathname/ access_*.log.1.gz
由于ls不支持正则表达式,我想出了以下内容以从我想要的文件的当前目录中获取列表:
find . -maxdepth 1 -type f -regex '\./access.+\.log\.[1|2]\.gz' -printf '%P\n'
find . -maxdepth 1 -type f -regex '\./access.+\.log\.[1|2]\.gz' | sed "s|^\./||"
我现在的问题是获取文件列表输出并通过文件zgrepping返回与我的文本匹配的那些文件中的行。我在这里咆哮错误的树吗?
答案 0 :(得分:2)
尝试:
zgrep /pathname/ access_*.log.{1,2}.gz
或者,使用find -exec:
find . -maxdepth 1 -type f -regex '\./access.+\.log\.[1|2]\.gz' -exec zgrep /path/ {} \;
答案 1 :(得分:0)
我没有apache-logs,所以我使用了类似但不相同的模式:
ls /var/log/*.[12].gz
shell不支持正则表达式,但使用[123]或[1-3]进行分组,以及{1,2,3}和{1..3}或甚至{o..w}和{066..091}。