UltraEdit 每次打开新文件的时候,都提示:
文件可能不是DOS格式,php
你要转换 File 为 DOS 格式吗?html
DOS、Mac 和 Unix 文件格式 相信不少朋友都碰到过这三种文件格式的互换问题,今日又碰到这个问题,突然想 寻根问底,因而整理了本文档。 文件格式区别 咱们先看看这三个家伙有啥区别。linux
好久之前,人们用老式的电传打字机做为输入设备,它使用 两个字符来另起新行。一个字符把滑动架移回首位 (称为回车,),另外一个字符把纸上移一行 (称为换行,)。 当计算机问世后,因为存储器曾经很是昂贵。有些人就认定不必用两个字符来表示行尾。因而 UNIX 开发者决定他们能够用 一个字符来表示行尾。sql
Apple 开发者规定了用 。 开发 MS-DOS (以及微软视窗) 的那些家伙则决定沿用老式的 。三种行尾格式以下: unix dos mac 这意味着,若是你试图把一个文件从一种系统移到另外一种系统,那么你就有换行符方面的麻烦。 转换 有需求就会有动力。编程
在Windows平台,有强大的UltraEdit,它支持DOS、Mac 和 Unix 三种文 件格式的任意互换。在【文件】->【转换】选项卡下有相应的对应选项,很傻很强大。vim
下面咱们看看在Unix/Linux平台该如何作呢? windows
方法一:强大的dos2unix dos2unix filename 网络
方法二:强大的脚本 sed 's/^M//' filename > tmp_filename 其中^M是同时Ctrl+V+M按出来的,表示回车。 或 tr -d "\r" filename 或 cat filename | perl -pe '~s/\r//g' > tmp_filename 函数
方法三:强大的vim vim filename :set fileformat=unix :w 或 vim filename :%s/^M//g :w 与vi不一样,vim具备自动识别功能,只需以下设置就能够自动进行转换。不过因为Mac格式比较特殊,vim对mac格式的自动探测可能会出错。请参考: http://vimcdoc.sourceforge.NET/doc/usr_23.html vim filename :set fileformats=unix,dos,mac 批量转换 有时候咱们可能但愿对这种转换进行批量处理。工具
在Windows下有强大的UltraEdit,用全局replace的方法或者创建工程的方法能够批量转换,请参考 http://tech.ddvip.com/2007-10/119380983936863.html 。Windows平台下还有不少相关的小工具,如MultiU2D等,google一下吧。 在Unix/linux平台下咱们就要借助脚本文件或者通道了,实质上是上述几种方法的自动化。
下面举几个简单例子,来源自 http://bbs.chinaunix.net/viewthread.PHP?tid=412957&extra=&page=1 :
脚本1: ls -l | awk '{print $8}' > filename.txt N=1 NN=`wc -l filename.txt | awk '{print $1}'` while [ "$N" -le "$NN" ]; do TempLine=`sed -n "$N"p "filename.txt"` if [ -n "$TempLine" ]; then tmpfilename=$TempLine dos2ux $tmpfilename > file mv file $tmpfilename fi N=$(($N + 1)) done
脚本2: for XFILE in $(egrep -l ^M `find . -name "*.txt";find . -name "*.sql"`) do echo "开始处理文件"$XFILE if [ -s $XFILE ] then TMPFILE=$XFILE.tmp mv $XFILE $TMPFILE tr -d "\r" $XFILE rm $TMPFILE else continue fi done 通道法: find . -type f |xargs -i dos2unix {} 后记 对于Mac格式转换到其余两种格式的方法相似,在类Unix环境下有dos2unix/mac2unix工具。 在计算机世界,格式转换无处不在,如字符格式、压缩格式、网络协议格式、音视频格式等等。因此进行相关工做时,应该多多留意。