换行不是'\ n'

时间:2016-03-03 15:41:50

标签: bash shell scripting line-breaks

我有一个由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”并重新运行代码就可以了。 因此,文本文件中的换行符可能没有用\ n来表示,还有哪些其他字符用于表示换行符?

P.S如果我在删除标签之前在文件上运行tr行,我会得到一个空输出。

谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

-s开关表示输入中存在的每个字符序列仅由单个空格替换。感谢glenn jackman指出这一点。

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

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

然后,您可以将此管道传输到sed以删除尾随的逗号(如果需要)。