DOS和UNIX文本文件之间相互转换的方法
在Vim显示^M字符的原因:在Windows下换行使用CRLF两个字符来表示,其中CR为回车(ASCII=0x0D),LF为换行(ASCII=0x0A),而在Linux下使用LF一个字符来表示。在Linux下使用vi来查看一些Windows下创建的文本文件时,有时会发现在每一行尾部有^M字符,其实它是显示CR回车字符。 在Unix/Linux下可以使用file命令查看文件类型,如下: # filedosfile.txt 下面有一些方法可以处理这种问题(其实这只是Windows和Linux平台表示回车的方法不一样而已!!!!)。 使用dos2unix 一般Linux发行版中都带有这个小工具,只能把DOS转换为UNIX文件,命令如下: # dos2unix dosfile.txt 上面的命令会去掉行尾的^M符号。 使用tr 使用tr命令拷贝标准输入到标准输出,替换或者删除掉选择的字符unix媒体转换,只能把DOS转换为UNIX文件,命令如下: # tr -d ‘\r’< dosfile.txt > unixfile.txt 使用vim Vim是一个vi的改进版本,可以运行在Windows和Linux平台上,使用方法如下: # vimdosfile.txt DOS转UNIX::setfileformat=unix UNIX转DOS::setfileformat=dos :wq 如果你需要把Unix文本文件转换为DOS文本文件,输入:setfileformat=dos,你也可以使用ff来替代fileformat,此时可以输入:set ff=dos。你可以输入:help fileformat来获得跟多的关于选项信息。 注:为了能让vim可以自动识别DOS和UNIX文本文件格式,可以在.vimrc(Linux)或_vimrc(Windows)配置文件中加入如下一行设置: setfileformats=dos,unix 设置完成后,使用vim打开DOS文本文件就不会显示^M字符了。 使用Emacs Emacs是一个Unix下面的文本编辑工具。它会在底部的状态栏上显示文件的信息。 DOS转UNIX :M-xset-buffer-file-coding-system Unix UNIX转DOS:M-xset-buffer-file-coding-system dos 使用sed 在DOS文件格式中使用CR/LF换行,在Unix下仅使用LF换行,sed替换命令如下: DOS转UNIX:$ sed ‘s/.$//’dosfile.txt > unixfile.txt UNIX转DOS:$ sed ’s/$/\r/’unixfile.txt > dosfile.txt 使用Perl Perl是相当直接,你添加或删除掉文件每行结尾的CR字符。 DOS转UNIX:perl -p -e ‘s/\r$//’< dosfile.txt > unixfile.txt UNIX转DOS:perl -p -e ‘s/$/\r/’< unixfile.txt > dosfile.txt 使用awk DOS转UNIX:awk ‘{sub(“\r$”,“”, $0);print $0}’ dosfile.txt > unixfile.txt UNIX转DOS:awk ‘{sub(“$”,“\r”, $0);print $0}’ dosfile.txt > unixfile.txt 使用Python DOS转UNIX:python -c “importsys; map(sys.stdout.write, (l[:-2] + ‘\n’ for l in sys.stdin.readlines()))”< dosfile.txt > unixfile.txt UNIX转DOS:python -c “importsys; map(sys.stdout.write, (l[:-1] + ‘\r\n’ for l in sys.stdin.readlines()))”< dosfile.txt > unixfile.txt 总结 还有其它DOS和UNIX文本文件的转换方法,我个人推荐使用vim命令。但是,对于大型的文件,推荐使用perl工具,你也不希望在vim或Emacs中打开几个G的文本文件。 (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |