sed 刪除行斷尾

sed 刪除行斷尾

在我的 Python 腳本中,我需要一種快速/有效的方法來設定我經常寫入的檔案的最大檔案大小。我沒有將整個內容放入 py 的 RAM 中,而是運行了以下 shell 命令:

sed -i '1d' file.csv

我定期監視文件大小並根據需要運行命令。問題是,現在如果我tail -f file.csv,一旦 sed 從文件中刪除一行, tail 就會停止尾隨文件。有什麼解決辦法嗎?

答案1

基本問題是sed建立一個新文件。下面的摘錄顯示了這一點:

$ strace -fe trace=file,read,write,close sed -i '1d'  /tmp/x.csv 
....
openat(AT_FDCWD, "/tmp/x.csv", O_RDONLY) = 3
...
openat(AT_FDCWD, "/tmp/sed1nFxY1", O_RDWR|O_CREAT|O_EXCL, 0600) = 4
write(5, NULL, 0)                       = 0
read(3, "1,1,1,1\n2,2,2,2\n3,3,3,3\n", 4096) = 24
write(4, "2,2,2,2\n", 8)                = 8
write(4, "3,3,3,3\n", 8)                = 8
read(3, "", 4096)                       = 0
close(3)                                = 0
close(4)                                = 0
rename("/tmp/sed1nFxY1", "/tmp/x.csv")  = 0
close(1)                                = 0
close(2)                                = 0

據我所知,沒有一種簡單的方法可以截斷文件的開頭。

我建議讓你的 python 應用程式監聽 unix/tcp 套接字,一旦接受,將該流放入日誌框架然後用它nc ... | tail來觀察輸出。

答案2

麥可漢普頓建議顯而易見tail -F,但我個人less現在主要使用:

less --follow-name +F file.csv

沒有速記替代方案--follow-name,我必須使用別名:

alias less='less --follow-name -XFR'

相關內容