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

一、文本格式区别

用UltraEdit打开unix文本文件时总会提示:是否将文件转换为dos格式。在windows编辑配置文件,然后用ftp上传到linux主机,发现运行时读取配置文件有错。由于没有经验,分析了半天。

UltraEdit另存为有1.DOS终结符-CR/LF

2.UNIX终结符-LF

3.MAC终结符-CR

具体分析,在 utrledit下打开分别打开一个dos和unix的文本文件,然后选择十六进制编辑,即可看到其编码内容(可以批量替换来转格式 bat文件)。unix下的回车是用0x0A表示的,而dos下的回车则是0x0D0A。

在windows下用utraledit编辑后,可以在文件菜单下找到转换为unix格式,然后再上传主机。但是这时还有问题,因为有的ftp工具可以选择以文本或者二进制格式传输,这时则必须选择二进制,否则传输时又会被改为dos格式。

unix文本文件和windows/dos文本文件的格式区别主要是两点:

换行符:

unix(/n)                            windows/dos(/r/n)

Ctrl:            ^J                              ^M^J

Dec:           10                               13+10

Hex:            0A                              0D+0A

Code:          LF                               CR+LF

文件结束符:

unix                            windows/dos

Ctrl:            ^D                              ^Z

Dec:           04                               26

Hex:            04                              1A

ASCII模式和Binary模式的区别是回车换行的处理,Binary模式不对数据进行任何处理,ASCII模式将回车换行转换为本机的回车字符,比如:UNIX下是\n,Windows下是\r\n,Mac下是\r。

ASCII模式下会转换文件,不能说是不同系统对回车换行解释不同,而是不同的系统有不同的行结束符。UNIX系统下行结束符是一个字节,即十六进制的0A,而Windows的系统是两个字节,即十六进制的0D0A,所以当你用ASCII方式从UNIX的FTP Server下载文件到Windows系统上时(不管是二进制或者文本文件),每检测到一个字节是0A,就会自动插入一个0D,所以如果你的文件是二进制文件,比如可执行文件、压缩包什么的,就肯定不能用了。如果你的文件就是UNIX下的文本文件,你用ASCII模式是正确的,要是误用了Binary模式,你在Windows上看这个文件是没有换行的,里面是一个个的黑方块。

一般来说,我们最好都用Binary方式,这样可以保证不出错。如果有文本格式转换的问题,即UNIX格式的文本和DOS格式的文本之间的转换,有很多工具可以做的,不要在ftp传输的时候冒险,尤其是你如果对这些东西不是非常清楚的话。

在printf这样的函数中, 如果你出现一个\n, 它却代表了一个逻辑上的意义, 即它代表在本地系统上的那种回车换行, 所以它在UNIX上只是<LF>, 但如果你在DOS上用诸如Truboc编程的话它输出的是<CR><LF>。

UltraEdit 每次打开新文件的时候,都提示:

文件可能不是DOS格式,

你要转换 File 为 DOS 格式吗?

高 级 -> 配置 -> 文件处理 -> DOS/UNIX/MAC 处理 -> UNIX/MAC 文件检测/转换 中,取消原先选择的
检测文件类型并提示进行更改,选取 禁用

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

时间: 2024-10-08 16:56:33

DOS、Mac 和 Unix 文件格式+ UltraEdit使用的相关文章

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

1. VI编辑器中转换 在VI中使用命令 set ff?(fileformat)可以查看文件的格式,使用set ff=dos(unix)可以设置文件的格式 2.使用sed处理(来至http://www.cnblogs.com/yangyh/archive/2011/08/12/linux.html) Sed命令笔记 Tag:linux sed 正则 替换 DOS/Windows和Linux/Unix的文件换行回车格式不同,基于 DOS/Windows 的文本文件在每一行末尾有一个 CR(回车)和

使用UltraEdit实现从DOS文件到UNIX文件的批量转换

最近把公司从SVN切到GIT下,因为大多同事在Windows下开发,又碰到换行符问题,找到一个批量转换方法 打开UE->在文件中替换,把^p替换成^n,然后设置好要替换的文件和路径,就开始替换吧. 使用UltraEdit实现从DOS文件到UNIX文件的批量转换

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

原文网址:http://blog.csdn.net/kobejayandy/article/details/13291525 问:我在Windows中通过FTP传一个文本文件到Linux中,但是打开文本文件后每行最后都有^M的标志.由于很长,用编辑器去除太麻烦,有什么解决办法呢? 答:为了解决这个问题,Linux下专门有两个工具可以互换Windows格式和Linux格式,它们分别是dos2unix和unix2dos.比如用下面的命令就可以将文件名为“filename”文件从Windows格式转换

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

问:我在Windows中通过FTP传一个文本文件到Linux中,但是打开文本文件后每行最后都有^M的标志.由于很长,用编辑器去除太麻烦,有什么解决办法呢? 答:为了解决这个问题,Linux下专门有两个工具可以互换Windows格式和Linux格式,它们分别是dos2unix和unix2dos.比如用下面的命令就可以将文件名为"filename"文件从Windows格式转换为Linux文本格式. 正文: 在Linux下,不可避免的会用VIM打开一些windows下编辑过的文本文件.我们会

将配置文件由Dos存为unix格式

将配置文件由Dos存为unix格式 问题:在Windows环境写好的脚本或配置文件,上传到Linux服务器后,无法正常使用. 原因:在Windows环境下编写的脚本文件默认脚本文件格式是dos格式,当文件上传到Linux环境后会因为格式问题而报错.常见的问题还发生rules\sigs等解码配置文件上. 解决:vi修改文件格式为unix,保存 :set ff=unix 原文地址:https://www.cnblogs.com/zhangyunfei-blog/p/9288540.html

Mac 新建unix可执行文件

新建一个文本,输入要执行的终端命令,然后另存为无格式文件, 比如另存为名script. 然后打开终端,输入 sudo chmod u+x script 这个script要写成那个文件的绝对路径. 比如 sudo chmod u+x /Users/xxx/Desktop/script 执行后,那个script文件就会变成类似批处理的文件.双击就能运行里面的终端命令. Mac 新建unix可执行文件

如何查看文件是dos格式还是unix格式的?

一.背景 由于windows和linux对换行的标识不一样,不同系统的代码传递导致代码格式的改变中可能会带来程序无法正常编译通过的问题.因此根据一些编译的错误提示,可以定位到是文件格式的问题,要对程序的文本文件进行转换. 二.解决方法 windows标识一行的结束用的是回车换行符,即'\r\n',也叫做CRLF.linux对一行结束的标识则只有换行,即'\n',也就是LF.将程序从windows下copy至linux下时,只需要使用如下命令对所有的文件进行格式转换即可(参考[1]).    fi

[转] 将DOS格式文本文件转换成UNIX格式

点击此处阅读原文 用途说明 dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter).DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A.而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是 0A.DOS格式的文本文件在Linux底下,用较低版本的vi打开时行尾会显示^M,而且很多命令都无法很好的处理这种格式的文件,如果是个shell脚本,.而Unix格式的文本文

Linux命令之dos2unix - 将DOS格式文本文件转换成UNIX格式 用途说明

dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter).DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A.而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是 0A.DOS格式的文本文件在Linux底下,用较低版本的vi打开时行尾会显示^M,而且很多命令都无法很好的处理这种格式的文件,如果是个shell脚本,.而Unix格式的文本文件在Windows下用Not