Используя именованный канал и вместо замены на sed
, вы можете добавить вывод команды в начало файла, не требуя явного временного файла:
mkfifo output
your_command >> output &
sed -i -e '1x' -e '1routput' -e '1d' -e '2{H;x}' file
rm output
Для этого выполняется буферизация вывода your_command
в именованном канале (fifo) и вставка вместо этого вывода с помощью команды r
sed
. Для этого вам нужно запустить your_command
в фоновом режиме, чтобы избежать блокировки на выходе в fifo.
Обратите внимание, что команда r
выводит файл в конце цикла, поэтому нам нужно буферизовать 1-ю строку файла в пространстве удержания, выдав его со 2-й строкой.
Я пишу без явного указания временного файла , так как sed
может использовать его для себя.