Answers:
您可以使用unix2dos(在Debian上找到):
unix2dos file
请注意,此实现不会CR
在所有LF
之前插入LF
,而不会在之前添加一个(也只有一个),CR
并且会跳过二进制文件(那些文件的字节值在0x0-> 0x1f范围内,,除外LF
)之前FF
。TAB
或CR
)。
或使用sed
:
CR=$(printf '\r')
sed "s/\$/$CR/" file
或使用awk
:
awk '{printf "%s\r\n", $0}' file
或使用perl
:
perl -pe 's|\n|\r\n|' file
'\r'
用sed
的伎俩。
这正是这样unix2dos
做的:
$ unix2dos file.txt
那将取代 file.txt
为带有CRLF行尾的版本。
如果要使用进行操作,则sed
可以在每行末尾插入一个回车符:
sed -e 's/$/\r/' file.txt
这将替换(s
)的线(结束前的大小为零的区域向右$
)用\r
。要进行就地替换(与之类似unix2dos
),请使用sed -i.bak
,尽管这是非标准扩展名-如果没有扩展名,请使用一个临时文件。
\r
替代是不可移植。至少,它在Mac OSX中不起作用。
u2d
,ux2dos
,todos
命令各地也是如此。
如果要在Unix机器(OS X,Linux)上进行转换,请使用vi
或打开文件vim
:
$ vim my-file
按ESC键以确保您未处于插入模式,然后键入
:set ff=dos
要么
:set fileformat=dos
这通过设置文件格式进行适当的转换。
要编写文件并退出编辑器,请使用
:wq
在命令行上,您可以执行
$ vi +':w ++ff=dos' +':q' my-file
使用POSIX这样做很棘手:
POSIX Sed不支持\r
或\15
。即使这样做,就位选项-i
也不是POSIX
POSIX Awk支持\r
和\15
,但是该-i inplace
选项不是POSIX
d2u和dos2unix不是POSIX实用程序,但ex是
POSIX前不支持\r
,\15
,\n
或者\12
要删除回车,请执行以下操作:
awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file
要添加回车符:
awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file
在awk中,您可以尝试
awk '{print $0 "\r"}'
要么
awk -v r=$'\r' '{print $0 r}'
的$'\r'
是ANSI-C风格的报价由像一些炮弹作为支持的例子ksh93
,bash
,zsh
,mksh
和FreeBSD sh
以及可能被包含在统一UNIX规范的问题8。
它提供了一种表达怪异字符的通用方法,请尝试以下操作,例如:
awk -v r=$'\U0001F608' '{print $0 r}'
CR
在每个 LF 之前插入一个,而只会在那些尚未带有一个(也只有一个)CR的LF 之前插入一个。