windows文件上传到Linux服务器后无法读取,原来是换行符的问题

linux上用vim写的文件test.txt拷贝到windows上,结果所有的内容都显示在一行中。Windows上建立的test.txt拷贝到linux上,结果linux程序运行异常。当你在Windows上写好linux shell script, 拷贝到linux下运行,就会出问题。问题就出在换行符^M身上!

linux去掉windows下文件中的\r

上用vim写的文件test.txt拷贝到上,结果所有的内容都显示在一行中。Windows上建立的test.txt拷贝到linux上,结果linux程序运行异常。当你在Windows上写好linux shell script, 拷贝到linux下运行,就会出问题。问题就出在^M身上!

Unix体系里,每行结尾只有“<换行>”,即“\n”;
Windows体系里面,每行结尾是“<换行><回 车>”,即“\n\r”。
一个直接结果是,Unix体系下的文件在Windows里打开的话,所有文字会变成一行;
而Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号。
使用vim方式处理
在vim命令模式下输入%s/^M$//g
回车即会自动删除该文件中的所有 ^M 字符。
那么,这句命令到底是什么意思呢?% 指匹配整个文件,s 是置换的意思,^M 注意要用 Ctrl + V Ctrl + M 来输入,M 后面的 $ 代表匹配行尾的内容,最后的 g 则表示每行中匹配到的内容都要置换。
理解了命令的含义,就好变通使用了,比如说,要将某个文件中的 Vim 全部替换成 VIM,则可以使用这样的命令::%s/Vim/VIM/g。

方法1::%s/^M//g

在命令模式下:输入:%s/^M//g 然后,回车即可替换
注意,其中”^M”的输入,分别是“Ctrl+v”、“Ctrl+M”键生成的

方法2::set fileformat=unix

使用vi打开文本文件
vi 需要编辑的文件名称
命令模式下输入
:set fileformat=unix
:w

方法3:使用sed工具

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

方法4:tr -d ‘\r'

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

方法5:dos2unix命令(最常用的方法)

dos2unix命令:
dos2unix 需要转换的文件名称
将文件直接转换成unix格式
通过以上方法可以将在windows下编辑的文件转换成linux下可读取的文件。

评分

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注