丢弃日志文件的内容,保留尾部

丢弃日志文件的内容,保留尾部

我正在寻找一种方法来丢弃日志文件的内容,只留下定义的尾部。只需两步就很容易了:

tail -n1000 alert_migtst.log > alert_migtst.tail
mv -f alert_migtst.tail alert_migtst.log

是否有办法通过单个命令实现相同功能,以及其他避免可能出现的线路丢失的原因?

答案1

您可以使用sed

sed -e :a -e '$q;N;1001,$D;ba' -i filename
  • -e定义脚本(命令)
  • :a定义标签
  • $q定义一个地址($文件末尾)并跳转q到该地址
  • N将下一行输入附加到模式空间
  • 1001,$d删除 1001 到文件末尾之间的所有行(因为前面的N行将被附加到模式空间)
  • ba分支到开头定义的标签

例如(文件最后 3 行)

$ cat alert_migtst.log 
1
2
3
4
5
6
7
8
9
$ sed -e :a -e '$q;N;4,$D;ba' -i alert_migtst.log 
$ cat alert_migtst.log 
7
8
9

答案2

您可以尝试使用海绵您可以使用软件包安装它moreutils。它允许您将输出重定向到同一个文件(否则您将删除它)。

   tail -n1000 alert_migtst.log | sponge alert_migtst.log

按照正常规则,在将其用于关键文件之前,请先对您找到的所有解决方案进行练习。

答案3

你可以在 Ex 模式下使用 Vim:

ex -sc '1,-1000d|x' alert_migtst.log
  1. 1,-1000选择除最后 1000 行以外的所有行

  2. d删除

  3. x保存并关闭

相关内容