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 "\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 文件格式[转]的更多相关文章
- DOS、Mac 和 Unix 文件格式+ UltraEdit使用
文件格式 区分DOS.Mac 和 Unix分别对应三种系统 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种 文件模式 区分ASCII模式和Binary模式 通常由系统决定,大多数 ...
- dos文件格式转换为Unix文件格式
做linux开发的,一般还是在windows上装个虚拟机,在windows上开发, 所以就会出现dos文件与unix文件格式不一致,当windows上的文件在linux上用的时候,经常在每行的末尾会出 ...
- DOS文件转换成UNIX文件格式详解
转:DOS文件转换成UNIX文件格式详解 由windows平台迁移到unix系统下容易引发的问题:Linux执行脚本却提示No such file or directory dos格式文件传输到uni ...
- dos与unix文件格式之间的转换
1. VI编辑器中转换 在VI中使用命令 set ff?(fileformat)可以查看文件的格式,使用set ff=dos(unix)可以设置文件的格式 2.使用sed处理(来至http://www ...
- DOS & UNIX文件格式转换
1.使用vi编辑器 vi xxxx :set fileformat=unix(or dos) :wq 2.使用 dos2unix 这个只能把DOS转换成UNIX文件 . sudo apt-get in ...
- 【转】Linux下的文本dos格式转Unix格式,去除^M符号
原文网址:http://blog.csdn.net/kobejayandy/article/details/13291525 问:我在Windows中通过FTP传一个文本文件到Linux中,但是打开文 ...
- 检测到 Mac 文件格式: 请将源文件转换为 DOS 格式或 UNIX 格式
非常简单可以解决: 方法一,用editplus打开,再复制回VS 方法二:在VS中,点文件->高级保存选项,然后在行尾选项中选择windows(CR LF),重新编译,ok
- 【改】DOS文件格式转UNIX文件格式
windows中的文本文件的换行符是"\r\n",而linux中是"\n",dos格式文件传输到unix系统时,会在每行的结尾多一个^M,当然也有可能看不到,但 ...
- windows下上传shell脚本不能运行—将dos模式修改为unix 文件格式
windows下上传shell脚本至linux,其格式将为dos.dos模式的shell脚本将不能再linux下正确运行,需要修改文件模式为unix. 1 查看文件模式方法 linux服务器上,用vi ...
随机推荐
- Android WebView存在跨域访问漏洞(CNVD-2017-36682)介绍及解决
Android WebView存在跨域访问漏洞(CNVD-2017-36682).攻击者利用该漏洞,可远程获取用户隐私数据(包括手机应用数据.照片.文档等敏感信息),还可窃取用户登录凭证,在受害者毫无 ...
- mysql自连接求累计金额
- [异常解决] 奇巧淫技——VirtualBox中的linux无显示启动,并在win7上远程控制
楼主是资深技术宅(癖),由于感觉手上的老笔记本太卡,遂狠心买了个性能至强的主机同时配了个投影仪(满足躺着打代码的意淫场景).但是体验了大概一个月发现还是坐着打代码舒服,但是如下图坐着打代码总是要抬头看 ...
- 日志采集框架Flume以及Flume的安装部署(一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统)
Flume支持众多的source和sink类型,详细手册可参考官方文档,更多source和sink组件 http://flume.apache.org/FlumeUserGuide.html Flum ...
- Mac 下 android/iOS https抓包
一.Charles简介 Charles,是用Java开发的,所以跨平台,不仅可以在Mac上使用,Linux以及Window下都是可以使用的,当然需要安装JDK,才能运行,但目前是收费的. 二.下载 官 ...
- python 版本管理工具 pyenv 使用备忘
安装步骤 安装 xcode-select 以及 homebrew(前者在安装 git 的时候装过,后者 mac 开发必备无需解释) 安装 pyenv brew install pyenv,用 pyen ...
- Java生成微信二维码及logo二维码
依赖jar包 二维码的实现有多种方法,比如 Google 的 zxing 和日本公司的 QrCode,本文以 QrCode 为例. QrCode.jar:https://pan.baidu.com/s ...
- Android基础_一次上传多张图片
获取权限 <uses-permission android:name="android.permission.CAMERA"/> <uses-permission ...
- linux连接mysql 出现Access denied for user 'root'@'localhost'(using password: YES)错误解决方案
linux连接mysql /usr/local/mysql/bin/mysql -uroot -p 输入密码出现Access denied for user 'root'@'localhost'(us ...
- 终于理解kalman滤波
2017拜拜啦,怎么过元旦呢?当然是果断呆实验室过... 应该是大二的时候首次听说kalman,一直到今天早上,我一看到其5条"黄金公式",就会找各种理由放弃,看不懂呀...但是研 ...