免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2058 | 回复: 8
打印 上一主题 下一主题

请教一个替换配置文件里一段代码的一个问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-13 14:45 |只看该作者 |倒序浏览
我的配置文件/etc/test.conf里有一段话
LogFile    /var/log/access_log.2005-04-10

我想做一个shell脚步,可以根据当前的系统时间替换那段话为
LogFile    /var/log/access_log.当前日期(格式同上)

我自己做了两段代码,一个是
  1.      #!/usr/bin/sh
  2.      file=`date +%Y-%m-%d`
  3.      touch todayis."$file"
  4.      exit 0
复制代码

执行后可以在当前目录下生成todayis.2005-04-13

但是我做第二个代码替换文件里    那段话的时候,却解决不了问题
  1.      #!/usr/bin/sh
  2.      file=`date +%Y-%m-%d`
  3.      awk '{if($1=="LogFile" && $2=="/var/log/access_log.") print $1 $2 " $file";    else print $0 }' /etc/test.conf > /etc/test.conf.temp1
复制代码

我不知道问题出在哪里,但是生成/etc/test.conf.temp1里面那段话并没有达到我的要求,请高手帮我解答一下,应该描述的还算清楚吧

论坛徽章:
0
2 [报告]
发表于 2005-04-13 15:22 |只看该作者

请教一个替换配置文件里一段代码的一个问题?

$2=="/var/log/access_log."这个判断不成立的
$2的内容为/var/log/access_log.2005-04-10

论坛徽章:
0
3 [报告]
发表于 2005-04-13 15:43 |只看该作者

请教一个替换配置文件里一段代码的一个问题?

首先感谢你的回答,但是有一个关键问题
我的配置文件/etc/test.conf里这段话
LogFile    /var/log/access_log.2005-04-10(注:我希望这个时间是每天随系统时间变化的)
所以第一次可以根据当前值去判断,但是这个值下次就变了

说的细一些,公司的web日志是每天到0点保存一份成.gz文件之后清空重新生成一个access_log.当前的日期(格式就是上边那种)统计新一天的web日志
我做了一个分析web日志的webalizer软件,但是因为日志名每天变化(通常情况下web日志就是accesss_log,那样很容易了),它没办法连续统计,我不能每次都手动的去刷新一次啊,所以想做一个crontab脚本,每天自动更新test.conf(实际就是webalizer.conf)那个文件,然后刷新,这样就可以连续分析web日志了。
还是希望有人能帮帮我,哪怕先判断那句话,把那句话删除掉,然后再重新生成也行。
因为工作紧,我也在查资料,但是还是想尽快把这个问题解决掉,所以来这发帖子。

论坛徽章:
0
4 [报告]
发表于 2005-04-13 16:06 |只看该作者

请教一个替换配置文件里一段代码的一个问题?

ok,你能否告知/etc/test.conf里有几行类似这样的数据?(一行,还是不确定)

论坛徽章:
0
5 [报告]
发表于 2005-04-13 16:12 |只看该作者

请教一个替换配置文件里一段代码的一个问题?

LogFile    /var/log/access_log.当前日期(格式同上)

整个配置文件里只有这一行,实在不行我就想办法删除,然后重新添加

论坛徽章:
0
6 [报告]
发表于 2005-04-13 16:15 |只看该作者

请教一个替换配置文件里一段代码的一个问题?

如果是RH linux 9.0的系统
这个应该可以实现你要的目标:

  1. sed -i "s:\(LogFile[ |\t]*/var/log/access_log\.\).*:\1`date +\"%Y-%m-%d\"`:" /etc/test.conf
复制代码

论坛徽章:
0
7 [报告]
发表于 2005-04-13 16:29 |只看该作者

请教一个替换配置文件里一段代码的一个问题?

万分感谢,顺利替换成功,我测试过了,

sed -i  应该是直接替换的意思吧,是不是有符合条件的多行会都替换掉

:应该替代了默认的/  

  1. sed -i "s:\(LogFile[ |\t]*/var/log/access_log\.\).*:\1`date +\"%Y-%m-%d\"`:" /etc/test.conf
复制代码


能帮我解释一下两个地方吗?

一个是 [ |\t] ,另一个是中间的 \1是做什么的吗?
这两个地方看的不是很明白,谢谢!

论坛徽章:
0
8 [报告]
发表于 2005-04-13 16:47 |只看该作者

请教一个替换配置文件里一段代码的一个问题?

[ |\t]*匹配空格符和制表符的任意组合。

\1是引用了前面通过 \(\) 定义的内容——
  1. \(LogFile[ |\t]*/var/log/access_log\.\)
复制代码

,就是记录了该行需要保留的部分:
LogFile  /var/log/access_log.


这个可以替换多行的

论坛徽章:
0
9 [报告]
发表于 2005-04-13 17:07 |只看该作者

请教一个替换配置文件里一段代码的一个问题?

谢谢了,这次全理解了,很久没用shell,好多都忘了,要重新看看资料了

新换了份工作,不像以前那样瞎忙了,能学东西的感觉真好
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP