Linux命令用另一个字符串替换HUGE文件中的字符串

时间:2012-12-24 16:17:31

标签: vim sed

我有一个巨大的文件(8GB),我想在前30行替换String LATIN1和UTF-8最有效的方法是什么?意味着有一种方法可以使用sed,但在解析前30行之后退出。

VIM无法在3小时内保存文件。

3 个答案:

答案 0 :(得分:3)

问题在于,如果发生替换,所有程序都会对文件的副本进行替换,以便最终替换原始文件 - 他们不想要因显而易见的原因而冒险失去原件。

使用perl,你可以在单行中执行此操作,但这不会使它更短(嗯,它可能与vim相比,因为vim在另一个文件中保留历史记录,而perl没有) :

perl -pi -e 's,\bLATIN1\b,UTF-8,g if $. <= 30' thefile

答案 1 :(得分:2)

使用sed,您可以退出q

sed -e 's/LATIN1/UTF-8/g' -e 30q

答案 2 :(得分:0)

未经测试,但我认为ed将在不编写临时文件的情况下就地编辑文件。

ed yourBigFile << END
1,30s/LATIN1/UTF-8/g
w
q
END