Vim编辑windows格式文件出现的[noeol][dos]的含义、解决方法及方法解释
前言
最近想要将保存再windows的文件传到linux上,传进去保存文件之后,用vim打开发现在文件的底下出现了[dos] [noeol]
这两个标志。然后就很疑问这是什么以及应该怎么解决
其实这两个问题产生的原因都是因为windows和linux对于文件的不同格式而引发的问题。
这是我在windows下的文件:
等我传到linux后,用cat -A ceshi.txt
,查看到的就是如下
会有一个[noeol] [dos]
的标志。
[dos]
这个标志的产生原因是因为在windows下,文件的换行符是\r\n
,而在linux下换行符是\n
,所以,使用cat -A ceshi.txt
会发现,多了一个^M
,而正常linux文件的就只有一个$
,所以说,我们要想办法把这个^M
去掉就可以消除[dos]标志了。
解决的方法:
-
dos2unix ceshi.txt
如果没有dos2unix
,首先得安装dos2unix
,
输入sudo apt-get install dos2unix
,这个一般都安装了 -
sed -i 's/^M//g' ceshi.txt
这里的^M
是用ctrl + V
,然后ctrl + M
打出来的
sed -i
的意思是直接在文件里编辑,s
是代表替换,/^M//
这里代表将^M
替换成空,g
是代表替换所有列
所以这个命令的含义就是将ceshi.txt
文件里的所有的^M
都替换成空 -
使用vim
首先vim ceshi.txt
,然后:1, $s/^M//g
这里得含义和第2种方法是一样的,但是不同点在于1, $
这里,是指定处理从第一行到最后一行,$
代表最后一行
同样这里的^M
是用ctrl + V
,然后ctrl + M
打出来的 -
cat ceshi.txt |tr -d '\r' > ceshi.txt
tr -d
是删除指定的字符,\r
是可以代表^M
[noeol]
这里的这个noeol
也就是no end-of-line
的意思,就是结尾没有一个换行符,这也是因为windows的文件的问题,因为其末尾是没有换行的
解决方法:
-
使用vim
当你的文件有这种[noeol]
的标志时,可以vim打开文件,然后输入:wq
保存,就可以把[noeol]
消除掉。 -
sed -i -e '$a\'
a
的意思是追加,就是在末尾追加一个换行。