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 之前插入一个。