LinuxSir.cn,穿越时空的Linuxsir!

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

请问如何用shell删除某个文件的某些信息?[已解决]

[复制链接]
发表于 2004-3-2 15:28:54 | 显示全部楼层 |阅读模式
假设abc.txt这个文件有以下的信息:
1078040788.617      1 192.168.0.1 TCP_IMS_HIT/304 215 GET
1078040788.746    376 192.168.0.1 TCP_MISS/304 322 GET
1078040788.795    928 192.168.0.5 TCP_REFRESH_HIT/304 302 GET
1078040788.856    447 192.168.0.1 TCP_REFRESH_MISS/200 1673 GET
1078040788.869    251 192.168.0.2 TCP_MISS/304 303 GET
1078040788.913    166 192.168.0.3 TCP_REFRESH_HIT/304 322 GET
........
........
........

请问如何用shell删除包含192.168.0.1这个IP的行呢?
发表于 2004-3-2 15:42:40 | 显示全部楼层
  1. awk '!/192.168.0.1/' abc.txt
复制代码
 楼主| 发表于 2004-3-2 16:11:56 | 显示全部楼层
最初由 javalee 发表
  1. awk '!/192.168.0.1/' abc.txt
复制代码


这个方法似乎有bug的,我用几行或者几十行的文件去试,是可以删除的。
但如果用几M的文件去试,却一行都不能删除,为什么呢?请问还有没有
更好的方法呢?
 楼主| 发表于 2004-3-2 16:21:19 | 显示全部楼层
最初由 javalee 发表
  1. awk '!/192.168.0.1/' abc.txt
复制代码



您误解我的意思了,我的意思是删除文件里的某些信息,并不是将删除后得到
的信息显示在屏幕上,而查看这个文件的时候,需要删除的信息并没有删除,仍然存在,我需要的是永久删除文件里的某些信息,而且再次查看这个文件时候,就不会再看到那些需要删除的信息。
发表于 2004-3-2 16:30:00 | 显示全部楼层
  1. awk '!/192.168.0.1/{print $0 >"newfile"}' file
  2. cat newfile
复制代码
or in vim
  1. :g/192.168.0.1/d
复制代码
or use while loop
  1. while read file;do
  2. echo $file|awk '!/192.168.0.1/{print $0 >>"newfile"}'
  3. done<file
复制代码
 楼主| 发表于 2004-3-2 17:56:27 | 显示全部楼层
感谢版主的指点!不过用vi的话,删除之后还需要保存文件,而其他方法则另外创建新的文件
发表于 2004-3-2 19:24:29 | 显示全部楼层

  1. $ grep -v '192.168.0.1' /your/file > newfile
  2. ## OR
  3. $ sed -e '/192.168.0.1/d' /your/file > newfile
复制代码
发表于 2004-3-2 19:26:25 | 显示全部楼层
如果想用一个命令完成, 自己写个程序好了, 不过其中还是需要创建临时文件
发表于 2004-3-2 23:24:00 | 显示全部楼层
如果是gnu版的sed,有个-i参数可以实现楼主的愿望。
发表于 2004-3-3 08:49:29 | 显示全部楼层
Red Hat 中的 sed 不是 GNU 的 ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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