在sed中替换不更改文件

时间:2016-01-19 11:24:12

标签: unix sed

道歉,如果之前已经介绍过,我有一个搜索但找不到任何东西。我意识到这可能是一个简单的错误,但我目前正在学习UNIX。

我一直在尝试进行sed替换,但每次尝试命令时,似乎打印出文件而不是替换任何东西?

有问题的命令是:

find . -name 'config.xml' -exec sed 's/<name>development<\/name>/<name>releases<\/name>/g' {} \;

运行此命令后,如果我尝试查找并{gre了<name>development<\/name>,它仍会返回结果。为什么呢?

任何帮助将不胜感激!感谢。

1 个答案:

答案 0 :(得分:2)

这是因为您实际上并未编辑该文件 - 只需将已编辑的版本打印到stdout即可。使用sed的-i标志:

  

-i[SUFFIX]
  --in-place[=SUFFIX]
      此选项指定要就地编辑文件。 GNU      sed通过创建临时文件并将输出发送到来完成此操作      这个文件而不是标准输出。(1)。

所以:

find . -name 'config.xml' -exec sed -i  's/<name>development<\/name>/<name>releases<\/name>/g' {} \;

如果您不想让他们逃脱,您还可以使用/以外的其他角色:

find . -name 'config.xml' -exec sed -i  's@<name>development</name>@<name>releases</name>@g' {} \;