sh/bash/dash/ksh/zsh等Shell脚本
-
tgchen
- 帖子: 25
- 注册时间: 2008-04-21 15:55
#1
帖子
由 tgchen » 2008-04-29 1:52
今天在网上复制一篇文章,里面随机插入了干扰信息“字串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 次。
-
thword
- 帖子: 119
- 注册时间: 2007-04-09 12:19
#2
帖子
由 thword » 2008-04-29 7:35
tr对中文的支持不是很好,换用sed吧。
代码: 全选
sed 's/字串[0-9]//' filename > newfile
-
tgchen
- 帖子: 25
- 注册时间: 2008-04-21 15:55
#3
帖子
由 tgchen » 2008-04-29 11:03
thword 写了:tr对中文的支持不是很好,换用sed吧。
代码: 全选
sed 's/字串[0-9]//' filename > newfile
试了一下,效果那是相当不错,谢谢了
能稍稍解释一下吗

-
laborer
- 帖子: 1016
- 注册时间: 2005-10-25 11:15
-
联系:
#4
帖子
由 laborer » 2008-04-29 11:15
你把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
-
tgchen
- 帖子: 25
- 注册时间: 2008-04-21 15:55
#5
帖子
由 tgchen » 2008-04-29 11:32
laborer 写了:你把tr的意义理解错了,tr -d "abc"的意思是删除文档中的字符a、字符b、字符c,而不是删除字符串"abc"
太谢谢你了,让我从错误中走了出来。
现在想想,是不是tr 把中文的两个字节拆开了,所以才会出现乱码
-
BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
-
联系:
#6
帖子
由 BigSnake.NET » 2008-04-29 13:56
tgchen 写了:laborer 写了:你把tr的意义理解错了,tr -d "abc"的意思是删除文档中的字符a、字符b、字符c,而不是删除字符串"abc"
太谢谢你了,让我从错误中走了出来。
现在想想,是不是tr 把中文的两个字节拆开了,所以才会出现乱码
对. tr 只对字节操作
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
-
thword
- 帖子: 119
- 注册时间: 2007-04-09 12:19
#7
帖子
由 thword » 2008-04-29 14:13
tgchen 写了:thword 写了:tr对中文的支持不是很好,换用sed吧。
代码: 全选
sed 's/字串[0-9]//' filename > newfile
试了一下,效果那是相当不错,谢谢了
能稍稍解释一下吗

s表示查找替换
/是分隔符,不一定要用/,用其它分隔符也可以,比如#
第一个/后面是要查找的字符
第二个/后面是表示替换后的字符,这里留空,表示删除
第三个/后面可以加一些控制符,比如g,表示全局替换;这里留空表示每行只替换一次
因为一般网页中加入随机字符,通常都是每行加一次,所以我就没用g