Shell sudo不';将sed的输出重定向到文件时无法工作
可能重复:Shell sudo不';将sed的输出重定向到文件时无法工作,shell,unix,Shell,Unix,可能重复: 假设我想更改/home中的文件“foo”,对其应用一些正则表达式(通过sed),并将结果放入名为/home/foo2的文件中 我对/home或foo都没有读/写权限,因此我使用sudo。然而,我仍然得到了拒绝的许可 sudo sed "s/bar/baz/" <foo >foo2 bash: foo2: Permission denied sudo sed“s/bar/baz/”foo2 bash:foo2:权限被拒绝 有什么想法吗? 谢谢使用就地选项,-i。您的语
假设我想更改/home中的文件“foo”,对其应用一些正则表达式(通过sed),并将结果放入名为/home/foo2的文件中 我对/home或foo都没有读/写权限,因此我使用sudo。然而,我仍然得到了拒绝的许可
sudo sed "s/bar/baz/" <foo >foo2
bash: foo2: Permission denied
sudo sed“s/bar/baz/”foo2
bash:foo2:权限被拒绝
有什么想法吗?
谢谢使用就地选项,
-i
。您的语法是:
sed -i [pattern] filename
虽然
sh
通常可能不是一个好主意,但这将允许您为shell创建一个新文件foo2
:
sudo sh-c“sudo sed's/bar/baz/'foo2”
-我是用来阅读文件的,我被拒绝了写它的权限哦!事实证明-我是在同一个文件中读写的,非常感谢(但我必须先做sudo cp foo foo 2)我应该提到,我怀疑您在同一时间读写同一个文件时遇到了问题,您的问题与此相关,而不是文件权限问题,在我写的命令中,我有一个输入错误:我写了“>foo-foo2您遇到了问题,因为shell在启动sudo
之前执行I/O重定向,所以它使用您自己的权限执行重定向,您知道这是不够的。因此,要让它工作,您必须让程序通过sudo
运行,以执行I/O重定向。我看到的两个答案都达到了这个结果。