2015-02-06 58 views
0

我有一個很大的csv文件(20 GB)。在該文件中,我想用<br/>替換\r的所有匹配項。我使用下面的命令來實現這一目標:替換一個20 GB的csv文件中的字符串

sed -i 's/\r/<br\/>/g' data.csv 

perl -i.bak -pe 's/\r/<br\/>/g' data.csv 

的問題是,這兩個命令都沒有(得到的文件是空的)。有沒有更好的方法來做到這一點?

+0

正在使用您的文件的Linux行結束符(''\ r'')或其他?你有沒有嘗試寫'\ n'而不是'\ r'(C標準說行結尾會自動轉換爲'\ n',這樣可能會影響這些程序(我知道它會執行vim))?另外,「失敗」和「生成的文件是空的」是非常不同的。 – Shahbaz 2015-02-06 10:30:43

+0

實際上該文件同時包含\ n和\ r。在一個較小的文件中,我首先用
替換了所有的\ n,並且仍然找到了一些新的行字符。然後我將其替換\ r並且它工作。我無法在大文件上執行類似的操作。 是的命令沒有失敗。它導致一個空文件 – user2730428 2015-02-06 10:38:17

+0

好的,這個文件是從os x還是windows發過來的?你總是可以嘗試dos2unix和類似的命令來修復行結束。儘管如此,如下面的答案中所提到的,非反轉的反斜槓可能是一個問題。 – Shahbaz 2015-02-06 10:40:35

回答

0

只需將您的sed命令替換爲該命令,我只是在源字符串中添加了\,它將使\成爲正常字符。

sed -i 's/\\r/<br\/>/g' data.csv 

也有另一種方式來做到這一點,

tr '\r' '_' data.csv 
sed -i 's/_/<br\/>/g' data.csv 
+0

但我想\ r被視爲回車。相同的命令適用於較小的文件。我不確定,這將如何改變輸出? – user2730428 2015-02-06 10:39:50

+0

我試過我自己的文件,這裏回答了這個問題,@ user2730428你還沒有試過我的回答? – Skynet 2015-02-06 10:42:21

+0

我試過了,我再次得到了空文件:( – user2730428 2015-02-06 10:51:31

相關問題