当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [已解决]批量删除字符后出现乱码问题
帖子发表于 : 2008-04-29 1:52 
头像

注册: 2008-04-21 15:55
帖子: 25
送出感谢: 0 次
接收感谢: 0 次
今天在网上复制一篇文章,里面随机插入了干扰信息“字串0”-“字串9”,于是我想把这些删除。
代码:
cat filename |tr -d "字串[0-9]" >newfile


打开newfile后乱码了:
代码:
评��:��错,Chix的确是��钻研Linux。��立LinuxChix的Deb Richardson想打箈�����能让��性��用的Linux邮���表。LinuxChix�的����,简直比Deb期望的还要流行。而�������的LinuxChix LUGs ���经����走����球。


我想可能是不能转换中文的问题,于是我先用gedit打“字串“这两个字替换成”abcdefg“,然后再执行:
代码:
cat filename |tr -d abcdefg[0-9] >newfile

这次可以了,没有乱码。

现在问题是有没有直接就删除而不出现乱码的方法呢?


最后由 tgchen 编辑于 2008-04-29 11:57,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-04-29 7:35 

注册: 2007-04-09 12:19
帖子: 119
送出感谢: 0 次
接收感谢: 0 次
tr对中文的支持不是很好,换用sed吧。

代码:
sed 's/字串[0-9]//' filename > newfile


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-04-29 11:03 
头像

注册: 2008-04-21 15:55
帖子: 25
送出感谢: 0 次
接收感谢: 0 次
thword 写道:
tr对中文的支持不是很好,换用sed吧。

代码:
sed 's/字串[0-9]//' filename > newfile


试了一下,效果那是相当不错,谢谢了
能稍稍解释一下吗 :oops:


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-04-29 11:15 
头像

注册: 2005-10-25 11:15
帖子: 1016
送出感谢: 0 次
接收感谢: 1
你把tr的意义理解错了,tr -d "abc"的意思是删除文档中的字符a、字符b、字符c,而不是删除字符串"abc"


_________________
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-04-29 11:32 
头像

注册: 2008-04-21 15:55
帖子: 25
送出感谢: 0 次
接收感谢: 0 次
laborer 写道:
你把tr的意义理解错了,tr -d "abc"的意思是删除文档中的字符a、字符b、字符c,而不是删除字符串"abc"


太谢谢你了,让我从错误中走了出来。 :D

现在想想,是不是tr 把中文的两个字节拆开了,所以才会出现乱码


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-04-29 13:56 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
tgchen 写道:
laborer 写道:
你把tr的意义理解错了,tr -d "abc"的意思是删除文档中的字符a、字符b、字符c,而不是删除字符串"abc"


太谢谢你了,让我从错误中走了出来。 :D

现在想想,是不是tr 把中文的两个字节拆开了,所以才会出现乱码


对. tr 只对字节操作


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-04-29 14:13 

注册: 2007-04-09 12:19
帖子: 119
送出感谢: 0 次
接收感谢: 0 次
tgchen 写道:
thword 写道:
tr对中文的支持不是很好,换用sed吧。

代码:
sed 's/字串[0-9]//' filename > newfile


试了一下,效果那是相当不错,谢谢了
能稍稍解释一下吗 :oops:


s表示查找替换
/是分隔符,不一定要用/,用其它分隔符也可以,比如#
第一个/后面是要查找的字符
第二个/后面是表示替换后的字符,这里留空,表示删除
第三个/后面可以加一些控制符,比如g,表示全局替换;这里留空表示每行只替换一次

因为一般网页中加入随机字符,通常都是每行加一次,所以我就没用g


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译