|

楼主 |
发表于 2009-3-2 21:46:10
|
显示全部楼层
Post by Jockey;1954777
印象中你似乎滥用cat,如果是的话可以考虑改掉。
自己想为什么:- $ file dos.txt
- dos.txt: ASCII text, with CRLF line terminators
- $ cat -v dos.txt > not_dos_again.txt
- $ file not_dos_again.txt
- not_dos_again.txt: ASCII text
- $
复制代码 然后正确的one-liner验证sed起效的方法应当是:- $ sed 's/^M//g' dos.txt | cat -v
复制代码 如果你硬是要使用你的方法也可以的:- $ cat -v dos.txt | sed 's/\^M//g'
复制代码 其中“^M”就是一个'^'字符后跟一个'M'字符。不过要是你的原文里本来就有字符'^'后跟字符'M',那就完蛋啦... XD
root@yan-desktop:/test/test# cat dos.txt
12332##DISO##45.12
00332##LPSO##23.11
01299##USPD##24.46
root@yan-desktop:/test/test# cat -v dos.txt | sed 's/^M//g'
12332##DISO##45.12^M
00332##LPSO##23.11^M
01299##USPD##24.46^M
root@yan-desktop:/test/test# cat -v dos.txt | sed 's/\^M//g'
12332##DISO##45.12^M
00332##LPSO##23.11^M
01299##USPD##24.46^M
root@yan-desktop:/test/test# file dos.txt
dos.txt: ASCII text, with CRLF, LF line terminators
root@yan-desktop:/test/test# cat -v dos.txt > not_dos_again.txt
root@yan-desktop:/test/test# file not_dos_again.txt
not_dos_again.txt: ASCII text
root@yan-desktop:/test/test# cat not_dos_again.txt
12332##DISO##45.12^M
00332##LPSO##23.11^M
01299##USPD##24.46^M
root@yan-desktop:/test/test# sed 's/^M//g' dos.txt | cat -v
12332##DISO##45.12
00332##LPSO##23.11
01299##USPD##24.46
root@yan-desktop:/test/test# cat -v dos.txt | sed 's/\^M//g'
12332##DISO##45.12^M
00332##LPSO##23.11^M
01299##USPD##24.46^M
以上的^M为先ctrl+v后按回车后所得,包括命令行,以上为按照您的方法做的验证,最后一条命令执行完之后,^M仍然没有过滤替换掉,但是在上面的是可以,是不是cat -v之后的^M重定向后就不是^M了,而是asicc的^M了。继续验证如下:
root@yan-desktop:/test/test# cat -v dos.txt | sed 's/\^M//g' > dostosed.txt
root@yan-desktop:/test/test# cat dostosed.txt
12332##DISO##45.12^M
00332##LPSO##23.11^M
01299##USPD##24.46^M
root@yan-desktop:/test/test# cat -v dostosed.txt
12332##DISO##45.12^M
00332##LPSO##23.11^M
01299##USPD##24.46^M
验证完成,请版主指点一下。 |
|