Não é para isso que serve a opção -i?
sed -i -e 's/foo/bar/' foo.txt
Se você fornecer um argumento para -i, ele faz um backup para você.
Eu quero usar a linha de comando para editar um arquivo de texto, mas não substituí-lo. Quero preservar o proprietário, o grupo e as permissões do arquivo.
Eu tenho um arquivo que contém uma contagem do número de vezes que um equipamento é usado. Este arquivo informa-me quando o equipamento precisa de manutenção. Não há preocupação com segurança, eu preciso que todos os usuários possam ler e escrever este arquivo.
Se eu usar sed para editar as contagens, ele substituirá o arquivo e a propriedade e as permissões do arquivo serão alteradas. Percebi que quando edito o arquivo com o vi, a propriedade e as permissões do arquivo não são alteradas.
Eu quero fazer a mesma coisa na linha de comando. Por exemplo:
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
Isso é um problema porque tanto o bill quanto o joe usam o script que atualiza o arquivo de contagem. Quando joe usa, as permissões mudam, impedindo que a conta seja usada.
Como o vi pode editar texto sem alterar o proprietário e as permissões, suponho que isso pode ser feito, mas estou com dificuldades para descobrir como fazer isso.
Não é para isso que serve a opção -i?
sed -i -e 's/foo/bar/' foo.txt
Se você fornecer um argumento para -i, ele faz um backup para você.