sed удаление разрывов строк хвост

sed удаление разрывов строк хвост

В моем скрипте Python мне нужен был быстрый/эффективный способ задать максимальный размер файла, в который я постоянно пишу. Вместо того, чтобы переносить все это в оперативную память py, я выполнил эту команду оболочки:

sed -i '1d' file.csv

Я периодически контролирую размер файла и запускаю команду по мере необходимости. Проблема в том, что теперь, если я tail -f file.csv, tail прекращает отслеживать файл, как только sed удаляет из него строку. Есть решение?

решение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'

Связанный контент