我想使用命令行编辑文本文件但不覆盖它。我想保留文件的所有者、组和权限。
我有一个文件,里面记录了某台设备的使用次数。这个文件让我知道设备何时需要维修。我完全不用担心安全问题,我需要所有用户都能读取和写入这个文件。
如果我使用 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 提供一个参数,它会为您进行备份。