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'

相关内容