我有非常大的文件(> 5G),我想删除行号的一些行而不移动(复制和粘贴)文件。
我知道这个命令适用于小尺寸文件。 (我的sed命令无法识别-i选项)
sed "${line}d" file.txt > file.tmp && mv file.tmp file.txt
由于大小,此命令需要相对较长的时间。我只需要删除第一行和最后一行,但也想知道如何删除行号n,例如。
答案 0 :(得分:0)
由于文件存储在标准文件系统(NTFS,EXTFS,...)上的方式,您无法就地删除部分文件。
你唯一可以做到的就是
其他操作必须使用临时文件或临时内存来完全读取文件并将其写回修改。
编辑:你也可以"收缩"使用C程序读取here的文件(Linux或Windows可以工作),这意味着您可以删除最后一行(但仍然不是第一行或其间的任何行)答案 1 :(得分:0)
如果您使用的是最近的Linux,则可以在任何位置删除文件块:https://lwn.net/Articles/415889/
答案 2 :(得分:0)
你可以使用与sed非常相似的ed
命令
ed -s file.text
您可以使用d
命令,$d
将删除最后一行,1d
将删除第一行,wq
将写入并退出。
以下命令将执行所有操作(删除第一行和最后一行,写入和退出)
echo -e '1d\n$d\nwq' | ed -s test.txt
使用sed
您可以使用相同的命令sed '1d;$d' test.txt