unix sed和重定向[重复]
Posted
技术标签:
【中文标题】unix sed和重定向[重复]【英文标题】:unix sed and redirection [duplicate] 【发布时间】:2017-01-10 23:09:47 【问题描述】:我正在尝试在 linux 服务器 (Ubuntu 16.04) 中使用 sed 修改文件。
这是我正在运行的代码示例:
sed 's/lineToChange/newString/' example.txt > example.txt
我觉得在执行此命令后我应该在 example.txt 中看到 newString,因为 sed 命令的结果(在没有重定向的情况下自行执行时打印 newString)被重定向以覆盖 example.txt 内容。
不幸的是,当我这样做时文件最终为空......
我的常识告诉我这应该是正确的,但很明显这里有一些我不明白的地方。
【问题讨论】:
>
具有更高的优先级。换句话说>
文件重定向将首先发生。因此,当sed
尝试处理该文件时,它会看到一个空文件。在sed
中使用-i
(就地编辑)选项。例如:sed -i 's///' file
谢谢坐。这真是一个很好的解释。像你这样的 Karoly 人让其他人对在堆栈溢出问题上提出问题感到不舒服......不过感谢您的提示,因为我从来没有想过在问之前用谷歌搜索它。
【参考方案1】:
如果你想内联编辑文件,你应该使用 -i 选项:
sed -i 's/lineToChange/newString/' example.txt
这会将 sed 运行到一个新文件中并将该文件移动到 example.txt。每当您执行“>”时,您实际上清空了 example.txt,这使得 sed 可以处理它。
【讨论】:
感谢您的快速回答!虽然不赞成.... 我没有给你投反对票,指责某人这样做是很不礼貌的。以上是关于unix sed和重定向[重复]的主要内容,如果未能解决你的问题,请参考以下文章