Если вы используете опцию -i
(это означает внести изменения на месте) sed
записывает во временный файл, а затем переименовывает его в ваш файл.Таким образом, если операция прервана, ваш файл останется без изменений.
Вы можете увидеть, какие файлы открыты, переименованы в strace
:
$ strace -e open,rename sed -i 's/a/b/g' somefile
Примечание: somefile
открывается только для чтения.
Кажется, нет способа переопределить каталог резервного копирования.GNU sed всегда записывает в директорию файла (± символические ссылки).Из sed / execute.c :
if (follow_symlinks)
input->in_file_name = follow_symlink (name);
else
input->in_file_name = name;
/* get the base name */
tmpdir = ck_strdup(input->in_file_name);
if ((p = strrchr(tmpdir, '/')))
*(p + 1) = 0;
else
strcpy(tmpdir, ".");
Префикс sed
жестко закодирован:
output_file.fp = ck_mkstemp (&input->out_file_name, tmpdir, "sed");