Назад | Перейти на главную страницу

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

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

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

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