2015-02-06 104 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

相关问题