最新消息:天气越来越冷,记得加一件厚衣裳

dos2unix将dos文件转换为unix格式

IOT开发 w3sun 1654浏览 0评论

背景

ARM AT91SAM9263EK毕设项目终于做完了,同时也到了要告别大学生活最后一站的时候了,看着板子上闪烁的指示灯不免回忆起很多很多的事情。顺便清理下实验室的电脑方便留给师弟师妹用。编译和开发日志是通过脚本来清理:

#!/usr/bin/bash
logs=`ls|grep log`
for log in $logs
do
   rm -fr $log
done

Windows下编辑好的脚本在Fedora上执行会报错:

[root@Hebut at91sam9263ek]$ sh clean.sh
clean.sh:行4: 未预期的符号 `$'do\r'' 附近有语法错误
'lean.sh:行4: `do

看着应该是包含了特殊字符导致的,通过cat -v clean.sh查看详细信息:

#!/usr/bin/bash^M
logs=`ls|grep log`^M
for log in $logs^M
do^M
   ls -al $log^M

可以看到每行结尾都多了一个^M标识,查询后发现是Windows和Linux系统换行符不同引起的,Windows格式文件的换行符为“\r\n”,而Unix&Linux文件的换行符为“\n”。可以在Linux环境下重写一份也可以通过dos2unix工具将Windows下的脚本文件转换为Linux下可用的脚本文件。

dos2unix简介

dos2unix软件包包括工具dos2unix 和 unix2dos,用于将纯文本文件在DOS或Mac格式与Unix格式之间相互转换。dos2unix命令其实就是将文件中的“\r\n”转换为“\n”,unix2dos与dos2unix相反,它是将Linux和Unix格式文件转换为Windows格式文件。

DOS/Windows的文本文件中,断行符是由两个字符共同表示的:回车符(CR)和换行符(LF)。Unix的文本文件中,换行符则由单个换行符(LF)表示。而Mac的文本文件则由单个回车符(CR,用于Mac OS X之前的系统)或单个换行符(LF,用于当下的新Mac OS)表示。除了断行符,Dos2unix还可以转换文件编码。一些DOS编码页可以被转换为Unix Latin-1,Windows Unicode(UTF-16)文件也可以被转换为Unix Unicode(UTF-8)文件。其中有几个注意事项:

  1. 二进制文件则会被自动跳过,除非指定了强制转换选项;
  2. 特殊文件,如目录和队列,会被自动跳过;
  3. 符号链接和其所指向的目标默认不会被转换,可以用选项来指定替换符号链接或者将输出写入到链接目标,需要注意的是Windows下不支持写入到符号链接的目标。

dos2unix由SunOS/Solaris下的版本改写而成。这两个版本间有一个重大差异:本版本默认进行原位转换(旧文件模式),而原来SunOS/Solaris下的版本只支持配对转换(新文件模式),参见选项 -o 和 -n。还有一个区别是SunOS/Solaris下的版本默认使用 iso 模式,而本版本默认使用 ascii 模式。

安装dos2unix

Fedora直接使用yum命令安装即可完成安装:

[root@Hebut at91sam9263ek]$ yum install dos2unix -y
[root@Hebut at91sam9263ek]$ dos2unix --version
dos2unix 6.0.3 (2013-01-25)
With Unicode UTF-16 support.
With native language support.
LOCALEDIR: /usr/share/locale

dos2unix转换文件

安装完成后直接执行转换命令即可将文件中的“\r\n”转换为“\n”:

[root@Hebut at91sam9263ek]$ dos2unix clean.sh
dos2unix: converting file clean.sh to Unix format ...
[root@Hebut at91sam9263ek]$ cat -v clean.sh
#!/usr/bin/bash
logs=`ls|grep log`
for log in $logs
do
   ls -al $log
done

参考文档

https://sourceforge.net/projects/dos2unix/

https://waterlan.home.xs4all.nl/dos2unix/zh_CN/man1/dos2unix.htm

转载请注明:雪后西塘 » dos2unix将dos文件转换为unix格式

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址