LinuxSir.cn,穿越时空的Linuxsir!

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

如何做这样的事?

[复制链接]
发表于 2005-12-9 11:09:09 | 显示全部楼层 |阅读模式
文件里含有像这样的行:
http://localhost/index.php
- -> trya
- -> tryb
http://some_eles
- -> trya
http://localhost/index.php
- -> trya
- -> tryb
- -> tryc
http://some_other

现在想把localhost名下的访问记录给删了,
最后得到:
http://some_eles
- -> trya
http://some_other

如何做呢?
谢谢了.
发表于 2005-12-9 16:05:45 | 显示全部楼层

  1. #! /bin/bash

  2. # Written by li-jiahuan@sohu.com
  3. # 05/12/09

  4. #日记文件
  5. LOGFILE=$1
  6. DATE=$(date +%y.%m.%d)
  7. #备份文件
  8. LOG_BAK=$LOGFILE.$DATE
  9. TMPFILE=log.$$
  10. LOCAL_LOG=true
  11. E_BADLOG=65
  12. E_NO_CHANGE=66

  13. Usage()
  14. {
  15.         echo usage: `basename $0` LOGFILE
  16.         exit $E_BADLOG
  17. }

  18. if [[ "$#" != 1 ]] || [[ ! -f $LOGFILE ]] ;then
  19.         Usage
  20. fi
  21.        
  22. cat $LOGFILE | while read lines
  23. do
  24.                 ##找到localhost的行,添加 localhost 标记
  25.                 if echo $lines | grep '^http://localhost.*' > /dev/null 2>&1  ;then
  26.                                 echo $lines | sed 's/^/localhost /' >> $TMPFILE
  27.                                 LOCAL_LOG=true
  28.                 ##找到非localhost的行
  29.                 elif  echo $lines | grep '^http' > /dev/null 2>&1  ;then
  30.                          LOCAL_LOG=false
  31.                         echo $lines >> $TMPFILE
  32.                 else
  33.                         ##找到属于localhost记录的行,添加 localhost 标记
  34.                         if [[ $LOCAL_LOG == true ]];then
  35.                                  echo $lines | sed 's/^/localhost /' >> $TMPFILE
  36.                         else
  37.                         ##找到不属于localhost记录的行
  38.                                 echo $lines >> $TMPFILE
  39.                         fi
  40.                 fi
  41. done

  42. # 比较原文件与临时文件
  43. diff $LOGFILE $TMPFILE > /dev/null 2>&1
  44. if [[ $? == 0 ]];then
  45.         echo -e "\nLocalhost's log not found, Log file not changed.\n"
  46.         rm -f $TMPFILE
  47.         exit $E_NO_CHANGE
  48. fi
  49. # 备份原日记
  50. echo "Creating backup file to $LOG_BAK ..."
  51. mv $LOGFILE $LOG_BAK
  52. echo -e "done\n"

  53. #把带有 localhost 标记的行删除
  54. grep -v "^localhost" $TMPFILE > $LOGFILE
  55. rm -f $TMPFILE


  56. exit 0
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-12-9 20:25:57 | 显示全部楼层
  1. eieng@deb013:~$ awk '
  2. > BEGIN{RS="http://";FS="\n";ORS="http://"}
  3. > {if($1 != "localhost/index.php") print}' datafile
  4. http://some_eles
  5. - -> trya
  6. http://some_other
  7. http://eieng@deb013:~$
复制代码


需要说的是会多出最后一行的 "http://"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-19 23:02:45 | 显示全部楼层
谢谢两位---今天才看见!
我是这样做的.

cat referer.log| sed -e '\|^http://localhost|,\|^http://| d' \
>/tmp/pt_removeself
mv -f /tmp/pt_removeself referer.log
回复 支持 反对

使用道具 举报

发表于 2005-12-21 18:41:43 | 显示全部楼层
有些看不懂

佩服
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-21 20:55:28 | 显示全部楼层
Post by huan
有些看不懂

佩服


也没什么, 就是删去前后之间的匹配的内容.
回复 支持 反对

使用道具 举报

发表于 2005-12-21 23:13:50 | 显示全部楼层
这我都忘了
惭愧
回复 支持 反对

使用道具 举报

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

本版积分规则

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