Нет, вы не можете легко удалить строки файла во время их отображения. Это было бы крайне неэффективно, так как требовало бы удаления символов из начала файла каждый раз, когда вы читаете строку. Текущие файловые системы довольно хороши для усечения строк в конце файла, но не в начале.
Простой, но чрезвычайно медленный метод будет выглядеть так:
while [ -s output.json ]
do
head -1 output.json
sed -i 1d output.json
done
Хотя этот алгоритм просто и ясно, вы должны знать, что каждый раз, когда вы удаляете первую строку с sed -i 1d
, она будет копировать все содержимое файла, но первую строку во временный файл, в результате чего в общей сложности будет записано примерно 0,5 * n² строк (где n - количество строк в вашем файле).
Теоретически вы можете избежать этого, сделав что-то вроде этого:
while [ -s output.json ]
do
line=$(head -1 output.json)
printf -- '%s\n' "$line"
fallocate -c -o 0 -l $((${#len}+1)) output.json
done
Но это не учитывает переменные символы новой строки (а именно символы DOS в формате DOS) и fallocate не всегда работают на xfs , среди прочих вопросов.
Поскольку вы пытаетесь использовать файл вместе с его созданием, не оставляя следа о его существовании на диске, вы по существу запрашиваете функциональность канала. На мой взгляд, вы должны посмотреть, как создается ваш выходной файл. json, и, надеюсь, вы сможете передать его в свой собственный скрипт.