2011-09-12 51 views
1

我試圖通過bash將一個文本文件追加到另一個使用foo.txt >> bar.txt。問題是,foo.txt的是windows文本文件(我認爲),因爲一旦在跳回到bar.txt附加如何在bash中轉換文本文件? (foo.txt到bar.txt)

every new^M 
line^M 
ends^M 
like this.^M 

因此,他們肯定是兩個不同的文件類型。

我向Google搜索了答案,但Google doesn't accept special characters like ">>" and "^" in search。我能找到的最接近的解決方案是a reported solution on commandlinefu.com,但它所做的只是從bar.txt中刪除r,實際上根本沒有解決方案。

所以,我這裏有兩個問題:

  1. 我怎麼發現,使用bash,什麼文件類型foo.txt的真的是?
  2. 如何正確轉換 foo.txt使其可以附加到bar.txt?

回答

5
sed 's/$'"/`echo \\\r`/" foo.txt >> bar.txt 

或使用dos2unix,如果它是可用的。

+0

如何確定它是試圖將其轉換之前DOS文件? – trench

+0

在vi中查看?如果在行尾有^ M個字符,它就是dos格式。或者如果您在Windows中,則將該文件加載到記事本中。如果你根本沒有換行符,它就是unix格式。 –

+0

即使沒有回車符(^ M),'sed'命令也可以安全使用。 – brightlancer

0

查閱命令dos2unixunix2dos。你不妨先製作一個拷貝(cp

1

使用fromdostodos,或unix2dosdos2unix

5

轉換在Windows行尾與dos2unix

dos2unix foo.txt 
4
  1. file foo.txt將輸出:「帶有CRLF行結束符的ASCII文本」,如果文件具有DOS風格的行結束符。
+0

謝謝,這照顧了我正在尋找的剩餘答案。 – trench

+0

如果只是純文本,是的。但對於某些可識別的文件類型,'file'命令不會顯示它是如何編碼的。例如,'file tmp.html'輸出'tmp.html:HTML文檔文本',而不管編碼如何(至少Ubuntu的'''file'命令執行此操作)。 –

+0

file --mime-encoding foo.html將輸出us-ascii,utf-8和c。 –

0

一個快速和骯髒的解決方案:

tr -d '\r' < foo.txt