Text-Processing
如何只保留日誌文件的最後 n 行?
我編寫的腳本做了一些事情,最後在它自己的日誌文件中附加了一些行。我只想保留日誌文件的最後 n 行(比如 1000 行)。這可以通過以下方式在腳本末尾完成:
tail -n 1000 myscript.log > myscript.log.tmp mv -f myscript.log.tmp myscript.log
但是有沒有更乾淨優雅的解決方案?也許通過單個命令完成?
這是可能的,但正如其他人所說,最安全的選擇是生成一個新文件,然後移動該文件以覆蓋原始文件。
下面的方法將這些行載入到 BASH 中,因此根據 from 的行數
tail
,這將影響本地 shell 的記憶體使用情況來儲存日誌行的內容。如果日誌文件末尾存在空行(由於 BASH 評估的行為
"$(tail -1000 test.log)"
),下面還會刪除空行,因此在所有情況下都不能提供真正 100% 準確的截斷,但根據您的情況,可能就足夠了。$ wc -l myscript.log 475494 myscript.log $ echo "$(tail -1000 myscript.log)" > myscript.log $ wc -l myscript.log 1000 myscript.log