Заменить текст в файле без перезаписи файла

Я хочу использовать командную строку для редактирования текстового файла, но не перезаписывать его. Я хочу сохранить владельца, группу и права доступа к файлу.

У меня есть файл, в котором хранится количество случаев использования оборудования. Этот файл дает мне знать, когда оборудование нуждается в обслуживании. Нет никаких проблем с безопасностью, мне нужно, чтобы все пользователи могли читать и писать этот файл.

Если я использую 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, он сделает резервную копию для вас.

Другие вопросы по тегам