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

vim命令如何显示^M换行符并删除 阅读详情

一、背景
昨天写了一个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

分词log如下:

CPU
Normal^M
Framer
Host
Link
Up^M

三、解决问题
发现这个问题之后,就得想办法去除^M 以及找到^M出现的原因;
经过百度,发现:

1. 在windows下的文本文件的每一行结尾,都有一个回车('\n')和换行('\r')
2. 在linux下的文本文件的每一行结尾,只有一个回车('\n');
3. 在Mac下的文本文件的每一行结尾,只有一个换行('\r');

而在linux下打开windows编辑过的文件,就会在行末尾显示^M;
这个^M的在vim下的输入是:

ctrl+v <----> ^
ctrl+m <----> M

四:解决方法
1:首先想到的字符串的替换
利用VIM的命令行输入:

%s/^M$//g

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

dos2unix Filename

3:批量转换

find ./ -type f -print0 | xargs -0 dos2unix

或者

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

即可。
五:后记
找到了解决方法,问题自然很快就解决啦。目前自动化脚本运行非常良好。分析结果,很直观。不过,这只是查找问题的第一步。
BTW,昨天是元宵节,解决完这个问题就直接回去了,今天补充的昨天的记录。

小程序结合Three.js与gsap:打造流畅3D动画的完整指南 本文详细介绍了如何在小程序中整合Three.js与GSAP动画库,打造流畅的3D动画效果。通过从环境搭建、基础场景创建到模型加载与复杂动画编排的完整指南,帮助开发者克服小程序性能限制,实现如商品360度展示等沉浸式交互体验,提升产品视觉吸引力。 阅读详情

相关推荐

LTE信令流程——切换

LTE信令流程 切换 切换是由基站发起的,不同于小区重选,小区重选是由UE发起的。 基站利用移动性管理算法给UE下发测量任务,在RRC重配置消息中携带MeasConfig信元给UE下发测量配置 切换有三种场景: 同一基站内不同小区的切换 不同基站间基于X2的切换(MME不变) 不同基站间基于S1的切换(MME/SGW可能改变) 1. 同一基站内不同小区的切换 连接态的UE在一个基站的不同小区之间移动 UE上报合适的测量报告(Measure Reports),触发基站切换 基站下发切换命令给UE,

Hxx的博客 1万+

^M问题的原因与解决

本文主要内容:1、为啥文件会出现^M ,2、如何解决^M带来的问题。 1、为啥文件会出现^M ^M是windos的dos格式特有的文件换行符,在linux上你可以通过 cat -A文件名 看到这些隐藏字符。 当您的文件是dos格式时,就会出现这个^M.所以一些shell脚本执行就会出现莫名其妙的问题。 2 解决方法: 如果需要转换,我们只需要转换文件格式即可...

小样 6万+

空心杯电机在美容仪器中的应用:为什么你的洗脸刷动力这么强?

本文深入解析了空心杯电机如何成为高端美容仪器的核心动力源。通过对比传统电机,揭示了其无铁芯、低惯量、零齿槽效应的技术优势,从而实现了强劲动力、极致静音与细腻震动的用户体验。文章详细阐述了空心杯电机在洁面刷、导入仪等美容仪器中的具体应用与选型考量,并指出了开发中驱动匹配、测试等关键实战要点。

j2k3l4的博客 1013

linux下使用vim编辑文件,出现^M是什么意思?

具体情况,先上张图看看, 如果你细心观察,你会发现每一行后面都会有个^M符号。 出现这个符号的原因很简单,因为这个文件你在windows平台下编辑过,我们知道在windows平台下,换行符是\r\n, 而在linux下是\n,这多出来的\r被vim解释成了^M。 虽然有^M这个符号,但是实际编译运行完全不受影响。

yuhengyue的博客 5万+

豆包大模型API调用两种方法

ps: 因为是自用,所以这里图方便采用硬编码密钥的形式;如果有需求/安全风险,建议参考官方教程设置ARK_API_KEY环境变量的方式。坏处是:看别人的教程走了一大圈弯路hh;基础调用的话方法一就可以满足了,也比较方便快捷,容易上手。将 <Model> 替换为 Endpoint ID即可。创建就按照提示填写信息就行,需要实名认证,有免费额度。绿框框里就是Endpoint ID。

kkkkkkkkkasey的博客 1万+

ADS2023实战:2.4GHz超外差接收机从设计到链路预算全流程解析

本文以ADS 2023软件为平台,详细解析了2.4GHz超外差接收机从核心指标定义、架构原理到完整链路搭建与仿真的全流程。通过实战演练,重点阐述了如何利用ADS进行谐波平衡仿真和链路预算分析,以量化评估系统增益、噪声系数等关键性能,为射频工程师提供了一套从理论到仿真的系统级设计方法。

herb5的博客 817

Vim中出现^M是怎么回事?

文档中为什么会出现^M? 原因:在Windows/Dos系统下编辑文字,win/Dos系统会在每一行后面插入一个换行符,即"^M",十六进制:0x0D0A,与Linux下的换行符十六进制是不一样的,Linux/Unix下是0A(ASCII码),具体也取决于编译器。 ^M,在vim中是特殊控制符,查找和修改无效。 解决方案:把\r\n中的\r去掉即可 方法一,命令行模式下:% s/\r//g 方法二:,命令行模式下% s/ctrl+v,然后再ctrl+m//g /* 编译器信息:De

陈先森's blog 1万+

【感知模块算法】障碍物detect+trace+prediction方向介绍

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、多维度看感知问题,体会复杂性二、障碍物/环境目标detect方向1.视觉目标检测方向(1)图像处理认知(2)视觉基础理论部分1、获取数据集---python网页爬虫、买数据、自己录数据、使用开源比赛的数据集2、opencv库的学习3、深度学习框架学习(3)视觉目标检测理论(1)目标检测的概念(2)目标检测的应用场景(3)现有目标检测框架原理及论文【这仅仅是我当初入门学习的框架~

qq_35635374的博客 2894

^M 字符处理

windows用的是\r\n来做分行的linux是\n

weixin_40026739的博客 1587

Yolov8-pose关键点检测:loss优化 | LRM loss困难样本挖掘,提升难样本、遮挡物等检测精度

LRM loss应用到能够大幅提升pose遮挡物性能

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1715

用miniconda建立PyTorch、Keras、TensorFlow三个环境

如果还没有安装Miniconda,请从[Miniconda官网](https://docs.conda.io/en/latest/miniconda.html)下载合适的版本并进行安装。如果遇到问题,可以通过编辑`~/.condarc`文件来临时禁用某个源,或者通过`conda config --remove channels`命令来移除配置的镜像源。要切换到不同的环境,先使用`conda deactivate`命令退出当前环境,再用`conda activate 环境名称`命令激活另一个环境。

数字人生 2464

vim 打开文件后会显示^M问题

背景 最近在移植代码的时候,遇到一个有意思的现象,用git diff 查看改动的时候,发现很多没改动的文件每一行的后面都有一个^M, 但是用vim 打开这些文件的时候,在每行的结尾有找不到这个 ^M。 目前有两个问题: ^M 是怎么来的? ^M 为什么在vim 下看不到? 问了解决第一个问题,我们得先知道^M 是什么? ^M 是什么 ^M 的出现主要是因为Windows 和 Linux 的换行...

small_a_black的博客 3914

基于深度学习的电力系统暂态稳定评估与预防控制复现

本文复现了基于深度学习的电力系统暂态稳定评估与预防控制方法。主要内容包括:(1)数据预处理环节,对IEEE 39节点系统的电压幅值、相角等特征数据进行归一化处理;(2)ACNGAT模型实现,该模型结合时间卷积网络(TCN)和图注意力网络(GAT)提取时空特征;(3)采用改进的帝企鹅优化算法进行预防控制。关键技术点包括:融合时空信息的特征提取、改进的邻接矩阵构建方法(λ_ij = E_i * E_j * B_ij)以及时空注意力机制。代码实现采用Python和PyTorch框架。

huanghm88的专栏 335

vim每行末尾都带有^M

使用vim打开文件,每行末尾都跟着^M字符,是由于windows行尾符与linux不一样导致的

wq_0708的博客 6520

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

删除vim打开文件末尾的^M

最近在Windows下写了一个shell脚本,拿到Linux下执行的时候一直提示找不到文件。但是文件明明就存在,在Linux用vi/vim 打开脚本,文件内容不为空,仔细检查脚本内容也没有出错,只是每行 末尾 多出来一个^M 符号。去掉这个^M 符号后就可以正常运行了。 发现这个问题之后,在网络上搜索去除^M 以及找到^M出现的原因;  经过百度,发现: 1. 在windows下的文

iamplane的博客 2596

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

vim打开文件有^M结尾

vim打开文件有^M结尾 当用vim编辑器,打开一个文件时,可能会出现每行的末尾都有"^M"符号. 这很可能是由于源文件不是用vim编辑的. 可以用以下方法快速的解决: 在命令模式下:输入:%s/^M//g 然后,回车即可替换 注,其中"^M"的输入,分别是“Ctrl+v”、“Ctrl+M”键生成的 方法2: 使用vi打开文本文件      vi dos.txt

gujing001的专栏 4883

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

vim 打开文件末尾带有^M

vim 打开文件末尾带有^M windows、mac和linux文本兼容性问题,建议使用dos2unix包解决,dos2unix your_file_name即可转换成linux文本兼容格式. 安装使用yum install -y dos2unix 如果报错You can enable repos with yum-config-manager --enable <repo> 是乌班图系统的默认程序管理不是不是yum,而是dpkg。 使用 apt-get install dos2uni

weixin_42274345的博客 302

解决vim打开文件末尾带有^M的问题

从服务器上拉取下来的代码,用vim打开,后面总是带有一个M的蓝色字符串,很奇怪: 解决办法,终端下输入:dos2unix filename如: 再次打开:

zxy987872674的博客 2625

VIM打开的文件中的^M

有两种情况,会出现打开的文件都显示^M符号:

学中医的程序员 777

去除vim中恼人的^M符号

项目中有的人用source insight在windows下编辑程序,有的人用vim在linux下工作,本来是个个人偏好的问题,可是有时候在linux下看用windows程序编辑器的文本头就大了,不是说程序看不懂,而是里面的一大堆^M符号。 那么^M是怎么来的呢? unix的换行符是0a, 而dos格式下的换行符是Ctrl + 0a, 这里的Ctrl就是0d 如果我们在vim中设置了ff(f

Qiang的专栏 6434

vim之删除^M

游离在windows和linux下的猿人肯定遇到过这个问题:在windows写的脚本程序,在linux下打开的时候出现了^M。这就牵扯到windows下回车和换行与linux下的区别,关于这个我不解释,去google吧,人家比我说的好多了!这里说一下在vim下怎么删除^M。 这里为了对比纯字符型的^M和回车换行的^M(0x0d 0x0a)的区别,我们需要先来产生一个这样的文件。 1.v

shuhuai007的专栏 1166

Linux Vim打开文件每行末尾有^M

Linux Vim打开文件每行末尾带^M

Cheny的博客 960

linux文件内容后面有^m,vim 打开Linux下文件每一行后面都有^M的样式

由于服务器不是我一个人在操作,在修改apache配置文件时发现了一个很奇怪的问题,vim编辑打开配置文件发现后面都有一个^M的标记虽然不会影响服务的运行,但总感觉不对劲,所以在此我尝试用替换的方式来设置它 :%s/\^M//g 虽然也成功了但还是感觉不是这么简单,查阅了下资料后发现,原来是我的一个同事用远程工具和windows下的编辑器修改过该文件,所以造成的回车问题,因为windows下的回车符...

weixin_39594296的博客 555
上一篇: [原创翻译]RFC1619 PPP over SONET/SDH
下一篇: 自动化交互脚本Expect简单介绍及应用实例
_UPDATA
博客等级 码龄15年 4粉丝 7原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值