Заменить текст в файле без перезаписи файла
Я хочу использовать командную строку для редактирования текстового файла, но не перезаписывать его. Я хочу сохранить владельца, группу и права доступа к файлу.
У меня есть файл, в котором хранится количество случаев использования оборудования. Этот файл дает мне знать, когда оборудование нуждается в обслуживании. Нет никаких проблем с безопасностью, мне нужно, чтобы все пользователи могли читать и писать этот файл.
Если я использую sed для редактирования счетчиков, файл будет перезаписан, а владелец и права доступа к файлу будут изменены. Я заметил, что когда я редактирую файл с помощью vi, владение и права доступа к файлу не изменяются.
Я хочу сделать то же самое из командной строки. Например:
cat foo.txt
foo
ls -l foo.txt
-rw-rw-rw- 1 root root foo.txt
cat foo.txt | sed -e 's/foo/bar/' > foo.txt
ls -l foo.txt
-rw-r--r-- 1 joe admin foo.txt
Это проблема, потому что и Билл, и Джо используют скрипт, который обновляет файл счета. Когда Джо использует его, разрешения меняются, что мешает его использовать Биллу.
Поскольку vi может редактировать текст без изменения владельца и прав доступа, я предполагаю, что это можно сделать, но у меня возникают проблемы с выяснением, как это сделать.
1 ответ
Разве это не то, для чего опция -i?
sed -i -e 's/foo/bar/' foo.txt
Если вы предоставите аргумент -i, он сделает резервную копию для вас.