日期:2014-05-16  浏览次数:20710 次

sed命令删除windows文本文件的行尾控制符
各位高手,本菜鸟在测试join命令的结果的时候,发现所得结果不对。

后面通过echo将内容输出到文件,再测试,结果正常。

于是猜想是windows下输入的文件有些特殊字符,特别是行尾的控制符。
我使用dos2unix命令处理windows输入文件后,发现能得到正确的结果。

于是,我想自己通过sed命令去处理那个行尾控制符,

$ cat -A test_file
M.Golls  Norwich NRD^M$
T.Norms  Brandon BSL^M$

于是,我使用:
$ cat -A test_file | sed -i 's/\^M//g' 
处理完后,发现还是不能得到正确的结果。

1.我猜想使用cat -A命令看到的^M$不是我们正在要处理的真实符号,而是cat
命令所表达的特殊符号,导致我用sed命令得不到正确结果。

2. 使用的sed命令有问题  ( 暂时本人没看出来)。


还请各位高手不吝赐教,多谢了!!!
shell?

------解决方案--------------------
你不用cat后再去sed
可以直接“sed -i 's/^M//g' test_file”可以解决(^M 可以不转义)
------解决方案--------------------
引用:
你不用cat后再去sed
可以直接“sed -i 's/^M//g' test_file”可以解决(^M 可以不转义)
你的“cat -A test_file 
------解决方案--------------------
 sed -i 's/\^M//g'”中sed不能加-i处理,-i是直接修改文件的。但改成“cat -A test_file 
------解决方案--------------------
 sed  's/\^M//g' > test_file”后也不能替换,确实是因为cat -A 的原因,你有时间再摸索下
------解决方案--------------------
sed -i 's/^M//g'  urfile

^M的输入方法是 ctrl + v 再按回车