将 sed 的输出重定向到文件时,sudo 不起作用[重复]
Posted
技术标签:
【中文标题】将 sed 的输出重定向到文件时,sudo 不起作用[重复]【英文标题】:sudo doesn't work when redirecting the output of sed to a file [duplicate] 【发布时间】:2012-10-19 22:58:52 【问题描述】:可能重复:How do I use sudo to redirect output to a location I don’t have permission to write to?
假设我想更改 /home 中的文件“foo”,对其应用一些正则表达式(通过 sed),并将结果放入名为 /home/foo2 的文件中.
我对 /home 或 foo 都没有读/写权限,所以我使用 sudo。但是,我仍然得到一个权限被拒绝
sudo sed "s/bar/baz/" <foo >foo2
bash: foo2: Permission denied
有什么想法吗? 谢谢
【问题讨论】:
您遇到了问题,因为 shell 在启动sudo
之前进行了 I/O 重定向,因此它使用您自己的权限进行重定向,您知道这还不够。因此,要让它工作,你必须让sudo
运行的程序来做I/O 重定向。我看到的两个答案都达到了这个结果。
【参考方案1】:
使用就地选项-i
。你的语法是:
sed -i [pattern] filename
【讨论】:
-i 用于读取文件,我获得了写入权限被拒绝 哦哦!原来 -i 用于在同一个文件中读写,太棒了,谢谢 (但我必须先做 sudo cp foo foo2) 我应该提到我怀疑您在同时读取和写入同一文件时遇到了问题,并且您的问题与此有关,而不是文件权限问题。 好吧,事情是,在我写的命令中我有一个错字:我写了 ">foo虽然sh
通常可能不是一个好主意,但这将允许为您的 shell 创建一个新文件 foo2
:
sudo sh -c "sudo sed 's/bar/baz/' <foo >foo2"
【讨论】:
以上是关于将 sed 的输出重定向到文件时,sudo 不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章