编辑一个巨大文件的第一行和最后一行

我想编辑一个非常大的文件(〜500GB)的第一行和最后一行。 怎么可以这样做? 例如,在第一行中我有:

-flag </begin> 

我想省略“-flag”。 我试过使用sed(如图所示)来编辑第一行,但我没有工作:

 sed -i '1s/-flag <begin>/<begin>/g' file.txt 

我想不出你能做到这一点的方式(我有兴趣听到一个!)

几乎没有一个班轮,但你可以试试这个:

 # substitute the first line and exit sed '1s/-flag \(.*\)/\1/;q' file > new # add the rest of the file (probably quicker than sed) tail -n +2 file >> new # cut off the last line of the file truncate -s $(( $(stat -c "%s" new) - $(tail -n 1 new | wc -c) )) new # substitute the last line tail -n 1 file | sed 's/-flag \(.*\)/\1/' >> new 

这假设你有几个工具,如truncate ,你可以在你的shell(我的shell是bash )算术。

truncate -s通过获取总文件大小stat -c "%s"和最后一行的长度(以字节为单位)之差来删除最后一行。

我不确定你想从最后一行中删除什么,但是我认为它和第一行相同(从行首开始删除 – -flag )。

建议修改是受欢迎的。

如果你只想在第一行删除-flag (注意尾部空白):

 sed -i '1s/-flag //' file 

如果你想完全替换第一行的内容,你可以发行

 sed -i '1s/.*/new first line/' file 

为了对最后一行也做同样的事情(我提供这个例子,因为你没有说最后一行要做什么),你可以做

 sed -i '$s/.*/new last line/' file 

一般来说,改变一个文件的开始需要完全重写这个文件 – 这是由于文件系统工作方式的原因。

但是,如果在保持完全相同的长度的情况下重写该行,则有一个技巧就地编辑

一个简单的命令行工具来完成这个任务将在Linux上hexedit (见其快捷方式)。 由于只有更改的字节需要写入磁盘,因此速度非常快。 但是,它需要新行具有相同数量的字符,这并不总是可能的。

在OP的情况下,用5个“空格”字符代替-flag可能就足够了,但是其他情况可能更难以处理。