替换文件中的文本而不覆盖文件

替换文件中的文本而不覆盖文件

我想使用命令行编辑文本文件但不覆盖它。我想保留文件的所有者、组和权限。

我有一个文件,里面记录了某台设备的使用次数。这个文件让我知道设备何时需要维修。我完全不用担心安全问题,我需要所有用户都能读取和写入这个文件。

如果我使用 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

这是一个问题,因为 bill 和 joe 都使用更新 count 文件的脚本。当 joe 使用该脚本时,权限会发生变化,从而阻止 bill 使用该脚本。

由于 vi 可以在不更改所有者和权限的情况下编辑文本,因此我认为可以做到这一点,但我无法弄清楚如何做到这一点。

答案1

这不就是 -i 选项的用途吗?

sed -i -e 's/foo/bar/' foo.txt

如果您向 -i 提供一个参数,它会为您进行备份。

相关内容