编辑大文本文件的第一行


16

我有一个巨大的文本文件,对于整个页面来说太大了,无法分页到内存中。我需要做的只是编辑第一行(它是CSV文件,我需要更改标题)。

有什么简单的方法可以让我在bash中做到这一点吗?


有某些原因不能只使用文本编辑器吗?
dangph

该文件太大,比我在这台机器上的最大虚拟内存大20倍以上。
lynks 2012年

1
很公平。我的印象是,好的文本编辑器可以处理非常大的文件,因为它们仅将需要的内容加载到内存中,但是在阅读了其他一些问题之后,似乎大多数文件都存在问题。
dangph

@dangph True ...可能很奇怪,但是像edlinms-dos或edUnix 等一些旧的和过时的“文本编辑器”(或所谓的)似乎没有这个问题,但是只有行编辑器... RAM at这段时间是一件稀缺而宝贵的事情,千兆字节的文件大小令人难以置信!;)
laurent 2012年

让事情澄清;):我不会错过ed!但在这种情况下会很合适(不确定是否可以处理此大小的文件...)
laurent 2012年

Answers:


22

您可以使用less查看要编辑的内容并sed进行更改。这样,您无需加载整个文件即可进行编辑。

另一种方法是拆分文件,然后编辑并再次加入:

split -b 10000k <file>

and to join:

cat xa* > <file>

为sed投票。
atroon

太棒了,拆分和加入正是我想要的,谢谢。
lynks 2012年

当然,sed更好,因为它可以轻松地搜索/替换整个文件,但是如果他只需要更改第一行,则split也不错,而且速度更快。
劳伦特

4
sed将花费几个小时来运行整个文件(不到一半TB),更改仅在第一行,将其拆分似乎是明智的。
lynks 2012年

3

如果您的修改更改了行的长度,则需要重新编写整个文件,例如,请参见关于SO的讨论。您可能应该考虑将数据保存到数据库中。

请记住,您可以使用sed进行流式编辑文件。要替换第一行,请执行以下操作(GNU sed):

< oldfile sed '1c\new_heading' > newfile
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.