ed


ramok аватар

Потоковое редактирование на месте с помощью 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.75
Ваша оценка: Ничего Рейтинг: 4.8 (4 голоса)