如何在每个换行符之前添加回车符?

如何在每个换行符之前添加回车符?

我有一个仅用于新行的文件\n,但我需要它\r\n用于每个新行。我怎样才能做到这一点?

例如,我使用 Vim 解决了这个问题:%s/\n/\r\n/g,但我想使用脚本或命令行应用程序。有什么建议么?

sed我尝试使用or查找此内容grep,但我立即对转义序列解决方法感到困惑(我对这些命令有点陌生)。

如果有兴趣,该申请与我的问题/答案相关这里

答案1

您可以使用UNIX2DOS(在 Debian 上找到):

unix2dos file

请注意,此实现不会CR在 every 之前插入 a LF,仅在那些LF前面尚未有 1 (且只有一个)的 s 之前插入CR,并且将跳过二进制文件(包含 0x0 -> 0x1f 范围内的字节值的文件,除了LF, FF,TAB或者CR)。

或使用sed

CR=$(printf '\r')
sed "s/\$/$CR/" file

或使用awk

awk '{printf "%s\r\n", $0}' file

或者:

awk -v ORS='\r\n' 1 file

或使用perl

perl -pe 's|\n|\r\n|' file

答案2

这正是unix2dos做:

$ unix2dos file.txt

这将替换file.txt为带有 CRLF 行结尾的版本。

如果你想用 来做到这一点sed,你可以在每行末尾插入一个回车符:

sed -e 's/$/\r/' file.txt

这取代了(s) 行尾之前的零大小区域 ($) 和\r。要进行就地替换(就像这样unix2dos做),请使用sed -i.bak,尽管这是一个非标准扩展 - 如果您没有它,请使用临时文件。

答案3

如果您在 Unix 计算机(OS X、Linux)上进行转换,请使用vi或打开文件vim

$ vim my-file

按 ESC 键以确保您不处于插入模式,然后键入

:set ff=dos

或者

:set fileformat=dos

这通过设置文件格式来进行适当的转换。

要写入文件并退出编辑器,请使用

:wq

在命令行上你可以这样做

$ vi +':w ++ff=dos' +':q' my-file

答案4

一个可移植的 shell 函数可以执行此操作:

u2dos() (set -f; IFS='
'; printf '%s\r\n' $(cat "$1"))

这样你就可以这样做:

u2dos file >dosfile

相关内容