sed -i
- это «редактирование на месте».Однако «на месте» не совсем.То, что происходит, выглядит так:
- создайте временный файл
- запустите sed для исходного файла и поместите изменения во временный файл
- удалите оригинальный файл
- переименовать временный файл как оригинальный
Например, если мы посмотрим на индекс измененного файла, мы увидим, что он изменился после запуска sed:
$ echo hello > a
$ ln a b
$ ls -lai a b
19005916 -rw-rw-r-- 2 jhnc jhnc 6 Jan 31 12:25 a
19005916 -rw-rw-r-- 2 jhnc jhnc 6 Jan 31 12:25 b
$ sed -i 's/hello/goodbye/' a
$ ls -lai a b
19005942 -rw-rw-r-- 1 jhnc jhnc 8 Jan 31 12:25 a
19005916 -rw-rw-r-- 1 jhnc jhnc 6 Jan 31 12:25 b
$
Thisозначает, что ваш скрипт должен иметь возможность создавать файлы в папке, в которой он выполняет редактирование на месте.