目录
背景
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
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)文件。其中有几个注意事项:
- 二进制文件则会被自动跳过,除非指定了强制转换选项;
- 特殊文件,如目录和队列,会被自动跳过;
- 符号链接和其所指向的目标默认不会被转换,可以用选项来指定替换符号链接或者将输出写入到链接目标,需要注意的是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格式