【问题标题】:unix sed and redirection [duplicate]unix sed和重定向[重复]
【发布时间】: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 人让其他人对在堆栈溢出问题上提出问题感到不舒服......不过感谢您的提示,因为我从来没有想过在问之前用谷歌搜索它。

标签: unix sed


【解决方案1】:

如果你想内联编辑文件,你应该使用 -i 选项:

sed -i 's/lineToChange/newString/' example.txt

这会将 sed 运行到一个新文件中并将该文件移动到 example.txt。每当您执行“>”时,您实际上清空了 example.txt,这使得 sed 可以处理它。

【讨论】:

  • 感谢您的快速回答!虽然不赞成....
  • 我没有给你投反对票,指责某人这样做是很不礼貌的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2018-04-22
  • 2018-12-22
  • 2016-04-28
  • 2019-04-08
  • 1970-01-01
相关资源
最近更新 更多