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

mod*_*tos 31 grep sed newlines

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

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

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

如果有兴趣,该申请涉及到我的问题/答案在这里

cuo*_*glm 41

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

unix2dos file
Run Code Online (Sandbox Code Playgroud)

请注意,此实现不会在 eachCR之前插入 a LF,只会在那些LF前面没有 1(并且只有 1)的 s之前插入,CR并且将跳过二进制文件(那些包含 0x0 -> 0x1f 范围内的字节值而不是LF, FF,TABCR)。

或使用sed

CR=$(printf '\r')
sed "s/\$/$CR/" file
Run Code Online (Sandbox Code Playgroud)

或使用awk

awk '{printf "%s\r\n", $0}' file
Run Code Online (Sandbox Code Playgroud)

或者:

awk -v ORS='\r\n' 1 file
Run Code Online (Sandbox Code Playgroud)

或使用perl

perl -pe 's|\n|\r\n|' file
Run Code Online (Sandbox Code Playgroud)


Mic*_*mer 10

这正是unix2dos它的作用:

$ unix2dos file.txt
Run Code Online (Sandbox Code Playgroud)

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

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

sed -e 's/$/\r/' file.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 使用 `\r` 替换是不可移植的。至少,它不适用于 Mac OSX。 (3认同)