vim 打开文件末尾带有^M的解决办法
2017-02-12 15:05
113 查看
一、背景
昨天写了一个expect脚本用来做 板卡的自动化测试,获取framer设备的link up/down信息 定向到log文件里面。为了方便分析和处理,使用shell 脚本处理这个log文本。
主要思路是将log中的特定行输出至新的new_log文件,对new_log文件中的词语进行拆分、比较,对设备link up/down 的状态信息进行统计。
初步写了一个shell脚本后,发现对设备的统计信息明显不对。为了测试程序,伪造了一个log文本,就是自己复制粘贴的数据;处理之后,发现统计信息没什么问题。。继续对源文件进行处理,还是有问题。百思不得其解。。。。
二:发现问题
经过伪造的log与new_log的对比分析发现,new_log文本里每行的末尾多了一个^M;利用shell鞋的分词程序发现,这个^M竟然与末尾单词是一个整体,怪不得统计信息有问题;单纯比较字符串的话,肯定是有问题的;
vim打开 new_log 的显示如下:
2
3
4
1
2
3
4
分词log如下:
CPU
Normal^M
Framer
Host
Link
Up^M
三、解决问题
发现这个问题之后,就得想办法去除^M 以及找到^M出现的原因;
经过百度,发现:
2
3
1
2
3
而在Linux下打开windows编辑过的文件,就会在行末尾显示^M;
这个^M的在vim下的输入是:
2
1
2
四:解决方法
1:首先想到的字符串的替换
利用VIM的命令行输入:
解释:% 指匹配整个文件,s 是置换的意思,^M 注意要用 Ctrl + V Ctrl + M 来输入,M 后面的 $ 代表匹配行尾的内容,最后的 g 则表示每行中匹配到的内容都要置换;
2:dos2unix工具
3:批量转换
1
或者
1
即可。
五:后记
找到了解决方法,问题自然很快就解决啦。目前自动化脚本运行非常良好。分析结果,很直观。不过,这只是查找问题的第一步。
BTW,昨天是元宵节,解决完这个问题就直接回去了,今天补充的昨天的记录。
昨天写了一个expect脚本用来做 板卡的自动化测试,获取framer设备的link up/down信息 定向到log文件里面。为了方便分析和处理,使用shell 脚本处理这个log文本。
主要思路是将log中的特定行输出至新的new_log文件,对new_log文件中的词语进行拆分、比较,对设备link up/down 的状态信息进行统计。
初步写了一个shell脚本后,发现对设备的统计信息明显不对。为了测试程序,伪造了一个log文本,就是自己复制粘贴的数据;处理之后,发现统计信息没什么问题。。继续对源文件进行处理,还是有问题。百思不得其解。。。。
二:发现问题
经过伪造的log与new_log的对比分析发现,new_log文本里每行的末尾多了一个^M;利用shell鞋的分词程序发现,这个^M竟然与末尾单词是一个整体,怪不得统计信息有问题;单纯比较字符串的话,肯定是有问题的;
vim打开 new_log 的显示如下:
CPU Normal^M Framer Host Link Up^M CPU Normal^M Framer Host Link Down^M1
2
3
4
1
2
3
4
分词log如下:
CPU
Normal^M
Framer
Host
Link
Up^M
三、解决问题
发现这个问题之后,就得想办法去除^M 以及找到^M出现的原因;
经过百度,发现:
1. 在windows下的文本文件的每一行结尾,都有一个回车('\n')和换行('\r') 2. 在linux下的文本文件的每一行结尾,只有一个回车('\n'); 3. 在Mac下的文本文件的每一行结尾,只有一个换行('\r');1
2
3
1
2
3
而在Linux下打开windows编辑过的文件,就会在行末尾显示^M;
这个^M的在vim下的输入是:
ctrl+v <----> ^ ctrl+m <----> M1
2
1
2
四:解决方法
1:首先想到的字符串的替换
利用VIM的命令行输入:
%s/^M$//g1
解释:% 指匹配整个文件,s 是置换的意思,^M 注意要用 Ctrl + V Ctrl + M 来输入,M 后面的 $ 代表匹配行尾的内容,最后的 g 则表示每行中匹配到的内容都要置换;
2:dos2unix工具
dos2unix Filename1
3:批量转换
find ./ -type f -print0 | xargs -0 dos2unix1
1
或者
find ./ -type f print0 | xargs -0 sed -i 's/^M$//'1
1
即可。
五:后记
找到了解决方法,问题自然很快就解决啦。目前自动化脚本运行非常良好。分析结果,很直观。不过,这只是查找问题的第一步。
BTW,昨天是元宵节,解决完这个问题就直接回去了,今天补充的昨天的记录。
相关文章推荐
- vim 打开文件末尾带有^M的解决办法
- 解决vim打开文件末尾带有^M的问题
- vim打开文件中每行末尾都带有 ^M
- vim搜索过字符串,打开其他文件也会高亮显示该字符串的解决办法
- 删除vim打开文件末尾的^M
- liunx 中使用vim 打开 txt文件时 中文出现乱码的解决办法
- 英文版XP不能打开带有中文路径的chm文件的解决办法
- vim 文件在linux不换行,只显示^M解决办法
- vim中 E212:无法打开并写入文件 的解决办法
- vim中E121:无法打开并写入文件解决办法
- vim中 E212:无法打开并写入文件 的解决办法
- fedora 15 中用vi 打开windows中创建的文件时,中文注释部分显示乱码解决办法:用vim 打开就可以
- 英文版XP不能打开带有中文路径的chm文件的解决办法
- vim 文件在linux不换行,只显示^M解决办法
- 去掉^M符号,linux vi打开来自win环境下的文件,有^M的原因和解决办法
- VIM 打开文件乱码解决办法
- 有时候用ifstream或ofstream打开带有中文路径的文件会失败。 解决办法
- 在VC中载入RES失败(提示:这个文件已在另一个编辑器中打开)的解决办法
- 无法打开exe任何可执行文件的解决办法
- MyEclipse 打开Struts配置文件时出错的终级解决办法