Linux 如何内联编辑大型文本文件

Linux 如何内联编辑大型文本文件,linux,text,Linux,Text,我有一个巨大的文本文件(100GB),需要在linux上编辑一行。 显然,这不能用常规的文本编辑器来完成。 有办法做到这一点吗?基本上跳到第n行,然后编辑它,然后再保存回来。如果您知道要编辑的位置的字节偏移量,并且编辑没有更改行的长度,那么您可以fseek()到该行,读入该行,更改它,然后写出。您可以使用“sed”流编辑器编辑任意大小的文件,因为它不需要一次加载整个文件。例如: sed '54 s/[0-9][0-9]*/gone/' < file_in.txt > file_o

我有一个巨大的文本文件(100GB),需要在linux上编辑一行。 显然,这不能用常规的文本编辑器来完成。
有办法做到这一点吗?基本上跳到第n行,然后编辑它,然后再保存回来。

如果您知道要编辑的位置的字节偏移量,并且编辑没有更改行的长度,那么您可以
fseek()
到该行,读入该行,更改它,然后写出。

您可以使用“sed”流编辑器编辑任意大小的文件,因为它不需要一次加载整个文件。例如:

  sed '54 s/[0-9][0-9]*/gone/' < file_in.txt > file_out.txt
sed'54 s/[0-9][0-9]*/gone/'file\u out.txt
将第54行中找到的数字替换为“gone”


它还支持使用“-i”选项就地编辑文件,但我从未在100GB的文件上尝试过。没有理由它不起作用。

假设有一个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

有关要编辑的内容、图案等的更多信息。。。那就更好了
sed
是编辑特定行的一个选项。据我所知,不打开文件是不可能的,因为在打开之前,文件在磁盘上的存储方式是未知的。您可以
split
文件,编辑相关块,然后使用
cat
再次重建这个巨大的文件。
-i
选项将创建一个tmp文件,完成后,将该tmp文件重命名为原始文件名。没有std unix文本实用程序可以就地修改文件,它将始终创建第二个副本,因此OP将需要额外的100GB空间来存放该tmp文件。祝大家好运。