LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 680|回复: 3

[求助]批量修改文件

[复制链接]
发表于 2006-11-4 20:23:21 | 显示全部楼层 |阅读模式
有大量这样的文件
.....................
EXPIRES [color="Red"]1131926400
..........


需要写脚本实现。
1.如果 EXPIRES 这一行的纪录为 "EXPIRES 0" 那么跳过,到下1个文件。
2.如果 EXPIRES 一行zone 2 (也就是1131926400)少于 1162642820那么修改为"EXPIRES 1167580800"
3.如果 EXPIRES zone2 大于 1131926400,则把zone2的值 加7776000。然后修改zone2的值为相加的结果!


请大家指点下思路,谢谢!
发表于 2006-11-5 10:20:22 | 显示全部楼层
awk:

  1. awk '{if ($1=="EXPIRES"){
  2.            if($2==0){ print >FILENAME
  3.           }else if ($2< 1162642820){print $1" 1167580800">FILENAME
  4.           }else if($2>1131926400){print $1" "$2+7776000>FILENAME
  5.           }else{ print >FILENAME}
  6.          }else {print >FILENAME}}'  file
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-8 21:49:26 | 显示全部楼层
谢谢楼上的回答,我用朋友给我写的这个搞定了。。
顺便问1个问题,,, 我要在文本内,每行的前5个字符,进行查找空格(\s),如果有空格出现三次{3,},就替换成1个,这样在sed 或 awk 里面怎么实现?麻烦指点下。
:2cool
  1. #/bin/bash
  2. if [ -z $1 ];then
  3. echo "file not existed"
  4. echo "quit now,please try with syntax "./modifyexpire.sh filename""
  5. echo "u can try :"
  6. echo "for i in \`ls\`;do ./modifyexpire.sh \$i; done"
  7. exit;
  8. fi

  9. expvalue=`cat $1|grep EXPIRES |awk '{print $2}'`
  10. if [ $expvalue = 0 ] ; then
  11. #value=0
  12. echo "notice: skip this user"
  13. elif [ $expvalue -lt 1162642820 ] ; then
  14. #value < 1162642820
  15. #set to 1167580800
  16. newvalue=1167580800;
  17. echo "notice: set to new value"
  18. elif [ $expvalue -gt 1131926400 ] ; then
  19. newvalue=expr $expvalue + 7776000
  20. echo "notice: set to longer time"
  21. fi
  22. echo notice"old value: $expvalue will be change to new value: $newvalue"

  23. sed --in-place "s/${expvalue}/${newvalue}/g" $1
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-11-10 18:35:04 | 显示全部楼层
试试这个:sed 's/ \{3\}/ /g' filename
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表