-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
产品发我一个excel,需求是用excel的手机号码去1000万文本里面进行匹配,找出对应的手机号码以及等级等字段,当传上linux服务器问题出现了,原本在window以每行结束的格式,全部乱了,而且出现了一个诡异的
^M,经过判断,最终定位是换行符造成的,原本在Windows下编辑的文件,换行符回车的格式为'\r\n',在linux下回车的格式为'\n',当在windows下编辑文本上传至linux下,原本windows下的'\r\n'就变成了^M+'\n'
解决方法如下:
1.使用dos2unix工具,默认都会自带,没有的话可以yum安装
$ dos2unix myfile.txt
2.vi修改文件(推荐使用)
1.windows下创建的并编辑的,文件中的换行符都说'\r\n',vi打开识别该文件是dos格式,此时不会显示出诡异的M,可以在编辑模式下:set fileformat=unix然后wq即可
2. 如果文件中的换行符有些是'\n\r',有些是\n',在vi显示文件时,'\r\n'全变成了M,而且全在一行,这种情况可以使用替换命令
":%s/^M//g" 替换所有的^M
":%s/^M$//g" 替换行尾的^M
":%s/^M/\r/g" 将^M替换成回车
特别注意,^M的输入方式是Ctrl+v,Ctrl+m
3.sed命令修改
$ sed -e 's/^M/\n/g' myfile.txt
^M = Ctrl+v,Ctrl+m(注意输入)
4.tr(它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符)
cat filename |tr -d '/r' > newfile
^M 可用 /r 代替
5.还有一些解决的思路,可以通过判断length,二进制比较判断文件的一致性(od)