zoukankan      html  css  js  c++  java
  • DOS、Mac 和 Unix 文件格式[转]

    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 " " filename

       cat filename | perl -pe '~s/ //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 " "  $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

  • 相关阅读:
    C++:变量声明和定义的关系
    Docker 方式搭建 zookeeper + kafka 集群
    Centos7.6系统下docker的安装
    CentOS7服务器下安装配置SSL
    《深入浅出密码学》|ing
    车联网入侵检测技术(持续更新)
    Hive的安装及交互方式
    Centos7中安装MySQL5.7记录
    Zookeeper-分布式锁代码实现
    【Java】String字符串的最大长度
  • 原文地址:https://www.cnblogs.com/helloyb/p/3492232.html
Copyright © 2011-2022 走看看