DOS、Mac 和 Unix 文件格式

相信很多朋友都碰到过这三种文件格式的互换问题,今日又碰到这个问题,忽然想
寻根问底,于是整理了本文档。

文件格式区别
   我们先看看这三个家伙有啥区别。很久以前,人们用老式的电传打字机作为输入设备,它使用
两个字符来另起新行。一个字符把滑动架移回首位 (称为回车,),另一个字符把纸上移一行 
(称为换行,)。
   当计算机问世后,由于存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。于是
UNIX 开发者决定他们可以用  一个字符来表示行尾。Apple 开发者规定了用 。
开发 MS-DOS (以及微软视窗) 的那些家伙则决定沿用老式的 。三种行尾格式如下:
        unix            
        dos             
        mac             
   这意味着,如果你试图把一个文件从一种系统移到另一种系统,那么你就有换行符方面的麻烦。

转换
   有需求就会有动力。在Windows平台,有强大的UltraEdit,它支持DOS、Mac 和 Unix 三种文
件格式的任意互换。在【文件】->【转换】选项卡下有相应的对应选项,很傻很强大。下面我们看看在Unix/Linux平台该如何做呢?

方法一:强大的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工具。
   在计算机世界,格式转换无处不在,如字符格式、压缩格式、网络协议格式、音视频格式等等。所以进行相关工作时,应该多多留意。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/97596/showart_1999657.html

DOS、Mac 和 Unix 文件格式[转]的更多相关文章

  1. DOS、Mac 和 Unix 文件格式+ UltraEdit使用

    文件格式 区分DOS.Mac 和 Unix分别对应三种系统 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种 文件模式 区分ASCII模式和Binary模式  通常由系统决定,大多数 ...

  2. dos文件格式转换为Unix文件格式

    做linux开发的,一般还是在windows上装个虚拟机,在windows上开发, 所以就会出现dos文件与unix文件格式不一致,当windows上的文件在linux上用的时候,经常在每行的末尾会出 ...

  3. DOS文件转换成UNIX文件格式详解

    转:DOS文件转换成UNIX文件格式详解 由windows平台迁移到unix系统下容易引发的问题:Linux执行脚本却提示No such file or directory dos格式文件传输到uni ...

  4. dos与unix文件格式之间的转换

    1. VI编辑器中转换 在VI中使用命令 set ff?(fileformat)可以查看文件的格式,使用set ff=dos(unix)可以设置文件的格式 2.使用sed处理(来至http://www ...

  5. DOS & UNIX文件格式转换

    1.使用vi编辑器 vi xxxx :set fileformat=unix(or dos) :wq 2.使用 dos2unix 这个只能把DOS转换成UNIX文件 . sudo apt-get in ...

  6. 【转】Linux下的文本dos格式转Unix格式,去除^M符号

    原文网址:http://blog.csdn.net/kobejayandy/article/details/13291525 问:我在Windows中通过FTP传一个文本文件到Linux中,但是打开文 ...

  7. 检测到 Mac 文件格式: 请将源文件转换为 DOS 格式或 UNIX 格式

    非常简单可以解决: 方法一,用editplus打开,再复制回VS 方法二:在VS中,点文件->高级保存选项,然后在行尾选项中选择windows(CR LF),重新编译,ok

  8. 【改】DOS文件格式转UNIX文件格式

    windows中的文本文件的换行符是"\r\n",而linux中是"\n",dos格式文件传输到unix系统时,会在每行的结尾多一个^M,当然也有可能看不到,但 ...

  9. windows下上传shell脚本不能运行—将dos模式修改为unix 文件格式

    windows下上传shell脚本至linux,其格式将为dos.dos模式的shell脚本将不能再linux下正确运行,需要修改文件模式为unix. 1 查看文件模式方法 linux服务器上,用vi ...

随机推荐

  1. [Micropython][ESP8266] TPYBoard V202 之MQTT协议接入OneNET云平台

    随着移动互联网的发展,MQTT由于开放源代码,耗电量小等特点,将会在移动消息推送领域会有更多的贡献,在物联网领域,传感器与服务器的通信,信息的收集,MQTT都可以作为考虑的方案之一.在未来MQTT会进 ...

  2. Dubbo(五) Dubbo入门demo——helloworld

    前言 前面我已经介绍了dubbo的一些基本工具和知识,让大家简单的了解了下RPC框架和Dubbo.接下来就是重点了,Dubbo的helloworld项目. 一.搭建项目 首先我们新建三个maven项目 ...

  3. 第十七章:Python の Web开发基础(四) MVC与Django

    本課主題 MVC 介绍 Django 介紹 MVC 介绍 controllers 处理用户请求 views 放置HTML模版 models 操作数据库 MVC框架就是目录的归类 MVC 是一种软件开发 ...

  4. 平衡树Treap模板与原理

    这次我们来讲一讲Treap(splay以后再更) 平衡树是一种排序二叉树(或二叉搜索树),所以排序二叉树可以迅速地判断两个值的大小,当然操作肯定不止那么多(不然我们还学什么). 而平衡树在排序二叉树的 ...

  5. 【数论·欧拉函数】SDOI2008仪仗队

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如右图 ...

  6. wifipineapple插件:codeInject的使用

    如果在中间人攻击的时候, 能在用户的网页中插入任意代码, 可以说已经完成一半了 wifipineapple有个codeInject插件, 可以让连上这个网络所有设备浏览网页的时候, 在网页中插入任意h ...

  7. pyqt4桌面软件各种画布组合结构实例

    import sys reload(sys) sys.setdefaultencoding('utf8') from PyQt4 import QtGui, QtCore try: from PyQt ...

  8. pycharm中进行带参数的调试

    之前基本都是用print进行调试的,但今天程序运行完需要等很长时间,就尝试pycharm调试. 但是在运行程序需要传递参数,之前只会点击bug按钮直接运行程序,不知道调试的时候传入参数. 运行---& ...

  9. ASP.NET Core 依赖注入

    一.什么是依赖注入(Denpendency Injection) 这也是个老身常谈的问题,到底依赖注入是什么? 为什么要用它? 初学者特别容易对控制反转IOC(Iversion of Control) ...

  10. Android热修复框架汇总整理(Hotfix)

      Android平台出现了一些优秀的热更新方案,主要可以分为两类:一类是基于multidex的热更新框架,包括Nuwa.Tinker等:另一类就是native hook方案,如阿里开源的Andfix ...