使用 Sed 时权限被拒绝

Dou*_*eux 3 permissions bash sed

我正在使用 Sed 查找和替换文件中的字符串。这是第一次使用它,所以我可能做错了,

我有一个名为“test.properties”的“root”拥有的文件,我想用“cat”替换“world”。

所以我运行这个命令:

sudo sed s/world/cat/ <test.properties >newtest.properties
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是当我想像这样写入相同的文件时:

sudo sed s/world/cat/ <test.properties >test.properties
Run Code Online (Sandbox Code Playgroud)

它说“-bash:test.properties:权限被拒绝”,但我使用的是“sudo”,为什么它被拒绝了?

Pra*_*min 5

不要运行您尝试运行的命令

如果您尝试将 sed 的输出重定向回同一个文件,它会将其清空,删除所有文件内容。尝试这样的事情:

sed s/world/cat/ <test.properties >newtest.properties && sudo mv newtest.properties test.properties
Run Code Online (Sandbox Code Playgroud)

您的权限被拒绝,因为命令的重定向部分不是通过 sudo 运行,而是以普通用户身份运行。

第一个命令有效,因为您只是读取第一个文件并写入您拥有的文件,因此您的普通用户可以这样做。

  • 某些版本的 sed 具有`-i`“就地编辑文件”选项。此外,我不明白为什么您将 sed 命令的输出通过管道传输到 `mv` 并且 `mv` 不会以 root 身份执行,因此它仍然会失败。 (3认同)

sci*_*rus 5

sudo sed -i s/world/cat/ test.properties
Run Code Online (Sandbox Code Playgroud)