ed
Потоковое редактирование на месте с помощью ed
Для того что бы заменить строчку в файле часто используется sed с ключиком -i.
Но не все знают что sed на самом деле создает копию файла и заменяет его на оригинал (не лишнее будет прочитать в man sed что на самом деле обозначает -i).
Проверить это можно так:
$ echo 1 > z.txt && ls -li z.txt && sed -i 'i1' z.txt && ls -li z.txt && rm z.txt 5290353 -rw-rw-r-- 1 ramok ramok 2 Апр 7 13:00 z.txt 5290354 -rw-rw-r-- 1 ramok ramok 4 Апр 7 13:00 z.txt
Здесь создается пустой текстовый файл, выводится номер его inode, затем с помощью sed добавляется '1', и снова выводится inode файла.
Видно что inode изменился.
При этом копия файла создается в текущей директории. Увидеть это можно так:
$ echo 1 > z.txt && ls -li z.txt && strace sed -i 'i1' z.txt 2>&1 | grep open && ls -li z.txt && rm z.txt
879149 -rw-rw-r-- 1 komar komar 2 Апр 7 13:06 z.txt
open("/etc/ld.so.cache", O_RDONLY) = 3 (4 голоса)

