今天项目联调的时候出现配置文件无法正确读取的问题,但是cat配置文件的值都对,纠结了好久最后使用开发板上的vi打开配置文件,发现配置文件每行的结尾多出来好多^M.后来上网查明了原因以及解决方案。
在 Linux 中使用打开曾在 Windows 中编辑过的文件时,会在行尾看到 ^M 字符。这个原因是由于Linux的回车换行是/n LF ($) 这个断行符号。而Windows下为/r/n 即CR 与 LF 两个符号。 这个^M 即是Windows下转为Linux下多出来的那个/r符号,Linux会将这个/r自动转换为^M. 使用Windows打开Linux下的文本文件即会出现这种情况,使用Windows下的ssh对开发板上的文件进行下载和上传有时也会出现同样的问题
解决方法如下:
在 Vim或Vi下的命令模式中输入 :%s/^M$//g 后,回车即会自动删除该文件中文件结尾的 ^M 字符。
(注意:其中的 ^M 要用 Ctrl + v然后Ctrl + m 来输入而不是单纯的输入^M),M 后面的 $ 代表匹配行尾的内容,最后的 g 则表示每行中匹配到的内容都要置换。
相关阅读:
Linux/Unix下去除windows下换行符^M http://www.linuxidc.com/Linux/2013-01/77761.htm
Linux Windows MAC操作系统中换行符差异 http://www.linuxidc.com/Linux/2012-11/74725.htm
Windows和Linux中任意字符串替换成换行符的问题 http://www.linuxidc.com/Linux/2008-09/15348.htm