换行符不是 '\n'

Newline is not '\n'

我有一个由 Matlab 创建的文本文件(我没有源代码),格式为:

a   b   c   d

e   f   g   h

我用过

sed -i '' $'s/\t/\/g' filename

用逗号替换所有选项卡,最后得到一个如下所示的文件:

a,b,c,d
e,f,g,h

然后,我尝试使用

删除所有换行符
tr '\n' ' ' < filename

它只给了我最后一行,但是当我通过将指针放在行尾然后按 "del" 和 "enter" 并重新 [= 手动编辑文本文件时31=] 代码运行良好。 所以,文本文件中的换行符可能不是用\n表示的,还有哪些字符可以表示换行符?

P.S 如果我在删除选项卡之前 运行 文件上的 tr 行,我得到一个空输出。

谢谢。

听起来你的换行符是 \r\n(Windows 风格的)。一种选择是先使用此命令删除它们:

tr -s '\r\n' ' ' < file

-s 开关意味着输入中出现的每个字符序列仅由单个 space 替换。感谢 glenn jackman 指出这一点。

稍微猜测你的意图,你可能想使用这样的东西,用逗号替换所有 spaces 包括换行符:

tr -s '[:space:]' ',' < file

然后,如果需要,您可以将其通过管道传输到 sed 以删除结尾的逗号。