Linux 上的‘tr’命令:LF 到 CRLF 不可能吗?

Linux 上的‘tr’命令:LF 到 CRLF 不可能吗?
echo "foo" > test.txt

od -c test.txt显示f o o \n如预期。

现在我尝试将 LF 转换为 CRLF 并检查管道后的结果:

tr '\n' '\r\n' < test.txt | od -c

但输出是f o o \r

这是怎么回事?为什么程序会忽略我的“and \n”而将其翻译为“just” \r

答案1

tr用单个字符替换单个字符。

tr [-c|-C] [-s] string1 string2

[…]

如果string2存在,则在指定的数组中找到的每个输入字符string1都应被指定的数组中相同相对位置的字符替换string2

(来源)

在这种情况下,第一个字符串的第一个字符(\n)被转换为第二个字符串的第一个字符(\r)。

您需要另一个工具来插入多个字符来代替一个字符。例如sed

sed 's/$/\r/' < test.txt | od -c

或者使用专门的工具来处理行尾:

unix2dos < test.txt | od -c

相关内容