Я хочу использовать командную строку для редактирования текстового файла, но не перезаписывать его. Я хочу сохранить владельца, группу и права доступа к файлу.
У меня есть файл, в котором содержится подсчет количества использований оборудования. Этот файл позволяет мне узнать, когда оборудование нуждается в обслуживании. Нет никаких проблем с безопасностью, мне нужно, чтобы все пользователи могли читать и записывать этот файл.
Если я использую 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 может редактировать текст без изменения владельца и разрешений, я предполагаю, что это можно сделать, но мне сложно понять, как это сделать.
Разве не для этого предназначена опция -i?
sed -i -e 's/foo/bar/' foo.txt
Если вы предоставите аргумент -i, он сделает резервную копию для вас.