sed 切割nginx日志文件问题

问题:
使用

sed -n "/04/Apr/2016/,/05/Apr/2016/"p access.log > test.log  
这句话无论如何也没办法成功,但是

sed -n "/05/Apr/2016/ ,$"p access.log >  test.log  
就能成功截取。

最后发现sed的参数其实是 查找 已经存在的文字,(重要)
由于今天下午(4月5号)清理了一次日志,当然就不会存在有“/04/Apr/2016/”的字符串存在的行
第一句截不出东西的命令,第一个参数“/04/Apr/2016/”是起始,第二个参数“/05/Apr/2016/”是结束,sed执行到第一个“/05/Apr/2016/”就停下了,所以什么都没截出来;
第二个能够成功的命令,起始是“/05/Apr/2016/”,结束是“$"(就是文件结尾),当然能截下文件
结论:
既然是每周截取一次,截取后清空日志文件,那就直接复制日志文件去该去的目录,然后goaccess好了。。。。。。。。

最终文件:


1 #!/bin/bash
2
3 monday_year=$(date -d 'last monday' +"%Y")
4 f_monday_month=$(date -d 'last monday' +"%m")
5 monday_day=$(date -d 'last monday' +"%d")
6
7 now_year=$(date -d 'now' +"%Y")
8 f_now_month=$(date -d 'now' +"%m")
9 now_day=$(date -d 'now' +"%d")
10
11 #filename_day=$monday_year$f_now_month$monday_day'-'$now_year$f_now_month$now_day
12 filename_day=$now_year$f_now_month$now_day
13 echo $filename_day
14
15 echo 1
16 #access
17 if test -s /usr/local/nginx/logs/access.log ;
18 then
19 filename=$filename_day
20 cp /usr/local/nginx/logs/access.log /var/www/html/logs_backup/access/$filename.log
21 zcat -f /var/www/html/logs_backup/access/$filename.log | /usr/local/bin/goaccess -a -p /root/.goaccessrc > /var/www/html/logs_html/access/$filename.html
22 fi
23
24 echo 2
25 #mantis
26 if test -s /usr/local/nginx/logs/mantis.log;
27 then
28 filename=$filename_day
29 cp /usr/local/nginx/logs/mantis.log /var/www/html/logs_backup/mantis/$filename.log
30 zcat -f /var/www/html/logs_backup/mantis/$filename.log | /usr/local/bin/goaccess -a -p /root/.goaccessrc > /var/www/html/logs_html/mantis/$filename.html
31 fi
32
33 echo 3
34 #blog
35 if test -s /usr/local/nginx/logs/blog.log;
36 then
37 filename=$filename_day
38 cp -f /usr/local/nginx/logs/blog.log /var/www/html/logs_backup/blog/$filename.log
39 zcat -f /var/www/html/logs_backup/blog/$filename.log | /usr/local/bin/goaccess -a -p ~/.goaccessrc > /var/www/html/logs_html/blog/$filename.html
40 fi
41
42 echo 4
43 log_report/goaccess_log.sh

原文地址:https://www.cnblogs.com/JohannaFeng/p/5642058.html