标题: [讨论]是否有方便的DOS和UNIX文件格式转换方法?
[打印本页]
作者: honghunter
时间: 2008-1-10 14:13
标题: [讨论]是否有方便的DOS和UNIX文件格式转换方法?
其实我只需要UNIX到DOS的,也就是'\n' -> '\r\n'
借助sed,可以是用如下方式达到效果:
sed -e "s/$/\r/" myunix.txt > mydos.txt
不过,我现在是想要问问,是否有更简单的方法,最好是不用第三方工具的。
原理我已经知道了,下面摘自:http://hi.baidu.com/dbsuit/blog/item/511eb409f9abe7266b60fba8.html
Windows/DOS与Unix文件格式之间的相互转换
2007-06-21 13:25
Windows/DOS与Unix文件格式是不同的
先搞清楚几个符号
*******************
0A LF ^J 换行
0D CR ^M 回车
*******************
DOS/Windows文本文件中使用CR(回车\r)和 LF(换行\n),
在文件的行尾的情况是是 '\r\n'
UNIX文本只使用换行符,在行的末尾有一个换行(\n),也就是'\n'
所以在windows下编辑的C程序放在unix下编译会出现"No end of newline"的Warning
两种文件格式之间的转化
Unix -> Dos
'\n' -> '\r\n'
//////////////////////////////////////////
while ( (ch = fgetc(in)) != EOF )
{
if ( ch == '\n' )
putchar('\r');
putchar(ch);
}
//////////////////////////////////////////
只要在Unix文件中出现的'\n'的之前加入一个'\r'字符就可以了
Unix <- DOS
'\n' <- '\r\n'
从Dos到Unix的情况复杂点,不能只是把从文件中读出的'\r'去掉就可以了
因为Dos文件中的文本行的末尾有时会内嵌一个回车符号,这种情况在击打式打印机中出现。
所以在转换前要判断'\r'是否和'\n'同时出现。
如果同时出现,则去掉'\r'
如果没有同时出现,保留'\n'
//////////////////////////////////////////
cr_flag = 0; /* No CR encountered yet */
while ( (ch = fgetc(in)) != EOF )
{
if ( cr_flag && ch != '\n' ) {
/* This CR did not preceed LF */
putchar('\r');
}
if ( !(cr_flag = (ch == '\r')) )
putchar(ch);
}
//////////////////////////////////////////
[
Last edited by honghunter on 2008-1-10 at 02:15 PM ]
作者: 不得不爱
时间: 2008-1-10 15:53
Unix -> Dos
for /f "delims=" %i in (Unix.txt) do echo %i>>dos.txt
就可以了
作者: honghunter
时间: 2008-1-10 16:12
Quote: |
Originally posted by 不得不爱 at 2008-1-10 03:53 PM:
Unix -> Dos
type Unix.txt>dos.txt
就可以了 |
|
我这么做了,可是还是UNIX的啊,郁闷。
作者: 不得不爱
时间: 2008-1-10 16:40
修改了下再看!
作者: honghunter
时间: 2008-1-10 16:45
源文件中只有换行的,新文件变成“ECHO 处于打开状态。”了
作者: 不得不爱
时间: 2008-1-10 16:55
不应该吧,怎么我没有那个问题啊
作者: lxmxn
时间: 2008-1-10 17:00
标题: Unix to DOS
more myunix.txt>mydos.txt
作者: honghunter
时间: 2008-1-10 20:54
谢谢各位,我明天到公司再试试看。
作者: weasel
时间: 2009-6-1 13:08
Quote: |
Originally posted by lxmxn at 2008-1-10 17:00:
more myunix.txt>mydos.txt |
|
解决了困扰我很久的问题。谢谢版主
太神奇了不知道more有这个作用。
[
Last edited by weasel on 2009-6-2 at 06:47 ]
作者: qqs09123
时间: 2010-7-19 20:56
Quote: |
Originally posted by weasel at 2009-6-1 13:08:
解决了困扰我很久的问题。谢谢版主
太神奇了不知道more有这个作用。
[ Last edited by weasel on 2009-6-2 at 06:47 ] |
|
同理,如果是在unix系统中,使用more dosfile>unixfile,也可以将windows格式文本转换成unix格式文本。
作者: HAT
时间: 2010-7-20 13:24
标题: Re 10 楼
你在什么版本的Unix里面测试的?
作者: qqs09123
时间: 2010-7-20 16:05
Quote: |
Originally posted by HAT at 2010-7-20 13:24:
你在什么版本的Unix里面测试的? |
|
不是测试是使用。是sco unix5.0.5版本
作者: HAT
时间: 2010-7-21 10:39
标题: Re 12 楼
你真幸运,我在以下系统里面的测试全部失败:
Ubuntu、Solaris、AIX、FreeBSD