道歉,如果之前已经介绍过,我有一个搜索但找不到任何东西。我意识到这可能是一个简单的错误,但我目前正在学习UNIX。
我一直在尝试进行sed替换,但每次尝试命令时,似乎打印出文件而不是替换任何东西?
有问题的命令是:
find . -name 'config.xml' -exec sed 's/<name>development<\/name>/<name>releases<\/name>/g' {} \;
运行此命令后,如果我尝试查找并{gre了<name>development<\/name>
,它仍会返回结果。为什么呢?
任何帮助将不胜感激!感谢。
答案 0 :(得分:2)
这是因为您实际上并未编辑该文件 - 只需将已编辑的版本打印到stdout
即可。使用sed的-i
标志:
-i[SUFFIX]
--in-place[=SUFFIX]
此选项指定要就地编辑文件。 GNUsed
通过创建临时文件并将输出发送到来完成此操作 这个文件而不是标准输出。(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' {} \;