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

最近在Windows下写了一个shell脚本,拿到Linux下执行的时候一直提示找不到文件。但是文件明明就存在,在Linux用vi/vim 打开脚本,文件内容不为空,仔细检查脚本内容也没有出错,只是每行 末尾 多出来一个^M 符号。去掉这个^M 符号后就可以正常运行了。

发现这个问题之后,在网络上搜索去除^M 以及找到^M出现的原因; 
经过百度,发现:

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

2. 在linux下的文本文件的每一行结尾,只有一个回车('\n');

3. 在Mac下的文本文件的每一行结尾,只有一个换行('\r');

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

ctrl+v <----> ^

ctrl+m <----> M

通过在网络上搜索,总结解决去掉文件末尾^M符号的几种方法:

方法一:利用VIM的命令行输入

用vim打开需要修改的文件,输入‘:’,进入命令行模式,输入字符串:%s/^M$//g

解释:% 指匹配整个文件,s 是置换的意思,^M 注意要用 Ctrl + V Ctrl + M 来输入,M 后面的 $ 代表匹配行尾的内容,

最后的 g 则表示每行中匹配到的内容都要置换; 

方法二:dos2unix工具(最常用的方法,亲测有效)

在终端中输入命令:dos2unix filename即可

方法三:

使用vi打开文本文件 
vi dos.txt 
命令模式下输入 
:set fileformat=unix 
:w

方法四:

 使用sed 工具 
sed ’s/^M//’ filename > tmp_filename

方法五:

既然window下的回车符多了‘\r’,那么当然通过删除‘\r’ ,也可以实现: 
tr -d ‘\r’

方法六:批量转换

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

针对不同的Linux 系统(有的是裁剪过的Linux),可以试用不同的方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值