转载地址:https://blog.csdn.net/laoding1993/article/details/50722029

一、背景 
昨天写了一个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^M
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
而在linux下打开windows编辑过的文件,就会在行末尾显示^M; 
这个^M的在vim下的输入是:

ctrl+v <----> ^
ctrl+m <----> M
1
2
四:解决方法 
1:首先想到的字符串的替换 
利用VIM的命令行输入:

%s/^M$//g
1
解释:% 指匹配整个文件,s 是置换的意思,^M 注意要用 Ctrl + V Ctrl + M 来输入,M 后面的 $ 代表匹配行尾的内容,最后的 g 则表示每行中匹配到的内容都要置换; 
2:dos2unix工具

dos2unix Filename
1
3:批量转换

find ./ -type f -print0 | xargs -0 dos2unix
1
或者

find ./ -type f print0 | xargs -0 sed -i 's/^M$//'
1
即可。

vim 打开文件末尾带有^M的解决办法相关推荐

  1. VS2012 无法打开文件“kernel32.lib”问题的解决办法

    VS2012 无法打开文件"kernel32.lib"问题的解决办法 参考文章: (1)VS2012 无法打开文件"kernel32.lib"问题的解决办法 ( ...

  2. NotePad 打开文件 出现中文汉字乱码 解决办法

    NotePad 打开文件 出现中文汉字乱码 解决办法 欢迎关注:程序员财富自由之路 现象: 出现中文汉字乱码: 解决办法: 先别着急用notepad修改编码 1. 用windows系统自带记事本打开, ...

  3. U盘安装Windows10系统报错无法打开文件install.wim原因及解决办法

    1.现象描述: 毕业后买了一台联想Y7000P笔记本电脑用了一年左右,换了工作后一直用的公司Mac笔记本,就这样联想笔记本闲置几年再次使用时系统更新一下,卡的要死就想重新安装一下系统,还是按之前经验使 ...

  4. 用VSCode打开文件出现中文乱码的解决办法

    文章目录 方法1:通过编码重新打开 方法2:改变编码设置 在使用VScode过程中,用其他编辑器写好的文件通过VSCode打开,如果有中文,可能会有乱码现象.(可能有其他原因,多试几次找到最佳方法) ...

  5. word在试图打开文件时遇到错误的解决办法

    错误为 解决办法: 打开Word,选择-文件-选项 点击左侧的信任中心按钮,然后选择右侧的信任中心设置 进入信任中心后点击左侧的受保护视图选项卡,默认是三个选项都被选中的,如图 取消勾选第一个选项&q ...

  6. 计算机无法打开文档,鼠标双击无法打开文件夹的三种解决办法

    电脑开机后,发现不能打不开桌面文件及文件夹,甚至连"我的电脑"都无法打开,遇到这样的问题,该如何解决?这样的问题,第一解决方法,就是重启电脑试试,如果还不行,就有可能是资源管理器未 ...

  7. 【疑难杂症】 打开文件 出现中文汉字乱码 解决办法(详细)

    01 问题描述 打开文件发现如下图等情况: 02 问题分析 2.1 普及一下编码格式的含义 列出五种常见的 ASCII编码:用来表示英文,它使用1个字节表示,其中第一位规定为0,其他7位存储数据,一共 ...

  8. 【Word】Word运行时提示“Word在试图打开文件时遇到错误”的解决办法

    今天突然遇到下载的带有 .doc文件使用office 2013打开时这个问题:见下图 经多次查找资料,找到一种解决方法如下: 点击 文件 里面有个选项: 再点击 信任中心----信任中心设置 如下图: ...

  9. linux vim m,关于linux中使用vim打开文件出现^M的解决方法

    在linux下,不可避免的会用VIM打开一些windows下编辑过的文本文件.我们会发现文件的每行结尾都会有一个^M符号,这是因为 DOS下的编辑器和Linux编辑器对文件行末的回车符处理不一致, 各 ...

最新文章

  1. 皮一皮:这小伙子怎么能掌握这么多高深技术!!!
  2. 【LeetCode】深搜DFS(共85题)
  3. 部署yum仓库与NFS服务
  4. matlab做横截面回归,matlab - 将横截面表面轮廓拟合到通用的已知公式以获得系数并对表面进行数学建模 - 堆栈内存溢出...
  5. ORACLE中关于外键缺少索引的探讨和总结
  6. 【英语学习】【WOTD】foray 释义/词源/示例
  7. linux-网络数据包抓取-tcpdump
  8. Android 整合新浪微博SDK问题
  9. C#生成GS1码制二维码
  10. 爬虫项目#4567电影网scrapy数据爬取moviePro/持久化储存handReqPro
  11. swfupload 无法加载_文件上传插件SWFUpload的使用指南
  12. 仿微信雷达寻好友动画
  13. Linux性能优化——如何测试网络延迟
  14. 苹果自带的清理软件_软件| 卸载软件、清理文件,你只需Revo Uninstaller Pro(自带注册程序)...
  15. 掌上快递之主界面篇(1)
  16. 如何设计USB TYPE-C接口的显示器和电视机,形态三独立功能的双USB-C接口 +一个HDMI接口的显示器
  17. SEER见证人操作指南
  18. React中文文档之Forms
  19. 数量金融学(8):Markowitz均值-方差模型(2)
  20. 使用SketchUp制作球体的方法(图文教程)

热门文章

  1. fastjson 过滤不需要的字段或者只要某些字段
  2. leetcode--207. 课程表
  3. 【四种解法】剑指 Offer 39. 数组中出现次数超过一半的数字
  4. Python类的结构及属性的获取机制
  5. InnoDB和MyISAM有哪些不同
  6. 数据库原理与应用(SQL Server)笔记 第二章 简单数据查询
  7. Eclipse安装AmaterasUML
  8. Linux系统 iptables 和 firewalld 的那些事
  9. Linux引导过程与服务控制、排障演示及运行级别(详细图解)
  10. 三层聚合实验的注意事项