2014-02-21 72 views
-1

我有一個巨大的文本文件(100GB),需要在Linux上編輯一行。 顯然,這不能用普通的文本編輯器來完成。 有沒有辦法做到這一點?基本上跳到第n行,然後編輯它,然後保存。如何編輯一個巨大的文本文件內聯

+0

有關您想編輯的內容,模式等的更多信息...會更好。 'sed'是編輯特定行的一個選項。 – iamauser

+0

據我的理解,打開文件是不可能的,因爲在打開文件之前文件如何存儲在磁盤上是未知的。 – gongzhitaao

+0

您可以「分割」文件,編輯相關的塊,然後使用「cat」重新構建大文件。 –

回答

1

您可以使用'sed'流編輯器來編輯任意大小的文件,因爲它不需要一次加載整個文件。例如:

sed '54 s/[0-9][0-9]*/gone/' <file_in.txt> file_out.txt 

將會替換第54行上的單詞'gone'。

它還支持使用'-i'選項編輯文件,但我從未在百兆文件上嘗試過。沒有理由它不應該工作。

+0

'-i'選項將sed創建一個tmp文件,然後完成後,將該tmp文件重命名爲原始文件名。沒有std unix文本工具可以修改文件,它總是會創建第二個副本,所以OP將需要爲該tmp文件額外的100GB空間。祝你們好運。 – shellter

1

如果您知道要編輯的位置的確切字節偏移量,並且版本不會更改該行的長度,那麼您可以將fseek()添加到行中,讀取行中的內容,將其更改並寫出。

0

假設有6000行'example.txt',並且您想要將第3001行更改爲'hello world'。

head -n 3000 example.txt > tmp.txt 
echo 'hello world' >> tmp.txt 
tail -n 2999 example.txt >> tmp.txt 
mv tmp.txt example.txt