linux 去除 windows 换行符
很久没更新技术流了,最近其实也做了不少事情,但是想想能跟大家分享的有限。因为太多都是属于定制性的对大家一点帮助也咩有
今天解决了一个遗留已久的问题,其实这个问题很简单,很多程序都已经实现了。但是我还是太笨了,没想到这个小问题花了我整整两个小时的时间在反复测试。
主要是个人有怪癖,首先最好是精确匹配换行标记,其次是只需要在本文件中更新(那些个生成个临时文件再替换一次的方法虽然能用但是这个是个人癖好),好了下面简单汇总一下网络搜索到的结果,分析下原因
原因:windows的文本文件记录具有CR/LF两种换行符。而linux只有LF一种,因此在linux中看到的windows文件就会有^M字符标记,你看不到的原因可能是你在使用vim或者vi等高级浏览器。本身并没有显示^M标记,vim打开的时候显示文件名处会写[dos]格式,而正常unix文件它却什么都不写。当然你可以通过cat -v filename来查看文件是否包含换行符
解决方法:
1.通过sed命令解决
就是这个破命令废了我好大劲
sed -i -e "s/\cM//g" filename
之前走了弯路虽然实现了但是总是觉得不爽才发现可以这么使用。之前写的命令是”s/[^A-Za-z0-9\”\)\_]$//g”其实这样也是可以的,原理很简单因为一般的匹配开始无法找到^M但是我发现通过正则匹配是可以匹配到的。因此上面那个公式的意思就是查找行尾除了字母数字符号以外的符号,其实就剩下控制符啦。很山寨哦
2.通过vim转换文件格式解决
这个方法虽然早就知道但是不适合我这次的需求但是写出来备档
:set fileformat?查看当前文档格式会显示为fileformat=[unix|dos|mac]其中过一种
3.通过tr命令解决
tr -d “[\015]” < file >/tmp/file
tr是个很好处理控制符号的程序但是没弄明白怎么修改当前文件,因此多数只能用作转换,file为源文件。/tmp/file为转换后的文件
其实很简单的问题解决起来也未必简单,希望这里的备档能给大家帮助
帮了大忙了。别的方法都很善哉,总是不放心。
哈哈,有用就好,能看到文章对别人有用很开心