我正在尝试获取文件的最后一行,然后将其删除:
阅读该行:
sed -n '$p' file
# or
tail -n 1 file
删除行:
sed -i '$d' file
这行得通,但是有没有办法只用一个命令来做到这一点?
我正在尝试获取文件的最后一行,然后将其删除:
阅读该行:
sed -n '$p' file
# or
tail -n 1 file
删除行:
sed -i '$d' file
这行得通,但是有没有办法只用一个命令来做到这一点?
无论流行的智慧是什么,每次都必须读取整个文件以切断其最后一行是愚蠢的,无论是在单个进程/命令还是两个或三个命令中完成。
与
sed -i
,不同的tail
是,它足够聪明,不会从头读取文件以确定其最后一行是什么;此外,linux 有一个truncate(1)
实用程序,它结合tail
允许您在 O(1) 时间内“弹出”一个大文件的最后一行:目标是有一个命令输出文件的最后一行,同时从原始文件中删除该行。
这将运行以下
sed
脚本:这会将最后一行写入
/dev/stdout
然后将其删除。-i
所有其他行都通过该选项写回原始文件。命令行上的脚本必须分成两部分,因为无法以其他方式分隔
w
命令的输出文件名(除了插入文字换行符)。与
ed
:ed
打开文件file
并将光标放在文件的最后一行。第一个命令将该行打印到标准输出,第二个命令将其删除,最后一个命令将缓冲区写回文件。ed
在大文件上可能不建议以这种方式使用。