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