如何在bash中转换文本文件?(foo.txt到bar.txt)

tre*_*nch 1 linux bash encoding text newline

我试图通过bash将一个文本文件追加到另一个文本文件中foo.txt >> bar.txt.问题是,foo.txt是一个Windows文本文件(我认为),因为一旦附加在bar.txt中

every new^M
line^M
ends^M
like this.^M
Run Code Online (Sandbox Code Playgroud)

因此,它们肯定是两种不同的文件类型.

我搜索了谷歌的答案,但谷歌不接受搜索中的">>"和"^"等特殊字符.我能找到的最接近的解决方案是在commandlinefu.com上报告的解决方案,但它所做的只是从bar.txt剥离r,这实际上根本就没有解决方案.

所以,我有两个问题:

  1. 我怎么发现,使用bash,文件类型foo.txt到底是什么?
  2. 如何正确转换 foo.txt使其可以附加到bar.txt?

Mic*_*ski 5

转换Windows行结尾dos2unix:

dos2unix foo.txt
Run Code Online (Sandbox Code Playgroud)


Mar*_*c B 5

sed 's/$'"/`echo \\\r`/" foo.txt >> bar.txt
Run Code Online (Sandbox Code Playgroud)

或使用dos2unix,如果它可用.

  • @trench你可以使用`file`命令在转换之前告诉文件的格式.但是,对已经采用unix格式的文件使用`dos2unix`是无害的. (2认同)