红联Linux门户
Linux帮助

dos2unix/unix2dos指令在git代码管理中的使用

发布时间:2016-04-23 22:32:03来源:linux网站作者:小白ing

有时候我们在linux下用vi或者vim打开文件,偶尔在文件的每行末尾会出现^M,那怎么解决呢?
我们只需要在命令行输入:dos2unix filename

命令虽有点奇怪,但是也很好记(2->two->to,谐音嘛)。
这个dos2unix命令:将DOS格式文本文件转换成UNIX格式。与之相反的有unix2dos命令。


现在我们先看一下dos2unix命令

dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。
DOS下的文本文件是以 \r\n 作为断行标志的,表示成十六进制就是0D 0A。
Unix下的文本文件是以 \n 作为断行标志的,表示成十六进制就是 0A。
DOS格式的文本文件在Linux底下,用较低版本的vi打开时行尾会显示^M,而且很多命令都无法很好的处理这种格式的文件,如果是个shell脚本。
Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。
因此产生了两种格式文件相互转换的需求,对应的将UNIX格式文本文件转成成DOS格式的是unix2dos命令。


常用参数

将DOS格式文本文件转换成Unix格式,最简单的用法就是dos2unix直接跟上文件名。

格式:dos2unix file

如果一次转换多个文件,把这些文件名直接跟在dos2unix之后。(注:也可以加上-o参数,也可以不加,效果一样)

格式:dos2unix file1 file2 file3

格式:dos2unix -o file1 file2 file3

上面在转换时,都会直接在原来的文件上修改,如果想把转换的结果保存在别的文件,而源文件不变,则可以使用-n参数。

格式:dos2unix -n oldfile newfile

如果要保持文件时间戳不变,加上-k参数。所以上面几条命令都是可以加上-k参数来保持文件时间戳的。

格式:dos2unix -k file

格式:dos2unix -k file1 file2 file3

格式:dos2unix -k -o file1 file2 file3

格式:dos2unix -k -n oldfile newfile

注:unix2dos命令的使用方式与dos2unix命令的类似。


与dos2unix相对应的命令有unix2dos,关于unix2dos命令的用法在这里就不作详细的解释了。

此外,unix2dos命令在我们用Git管理代码时也是比较常用的。

比如我们在开发中会常常使用到git指令,patch指令相关的一些操作。

git diff > filename

patch -p1 < filename 在执行此命令之后我们用gitk指令查看时会发现与我们预想的结果又很大的差异,会出现无关的代码删除、添加的动作。


这是我们想要的结果:

dos2unix/unix2dos指令在git代码管理中的使用

这是我们执行patch -p1 < filename之后实际的结果:

dos2unix/unix2dos指令在git代码管理中的使用

这样我们怎么办呢?unix2dos就起到作用了,我们可以把相应打过补丁的文件拷到linux下执行:

unix2dos file (在这里的话就是evt.cpp了),然后把执行此指令之后得到的文件拷到对应的目录下面覆盖原来的文件就OK了。

如果你的电脑安装了Git(如果有需要的话,可以点击链接下载https://yunpan.cn/cY4jZUnuC8cQP  访问密码 011f)或者安装了cygwin的话,也可以在win电脑上执行此动作。

最后我们再执行gitk查看的话,就是我们想要的结果了。


我们也可以使用sed指令,理论上是一样的,只不过小白我没尝试过这样

dos转UNIX格式:sed -i 's/^M//g' filename
UNIX转dos格式:sed -i 's/$/^M/g' filename
^M的输入方式是 Ctrl + v ,然后Ctrl + M


本文永久更新地址:http://www.linuxdiyf.com/linux/20016.html