使用sed替换字符串时,更改不会应用于文件中

时间:2017-10-28 15:22:27

标签: unix sed

sed -i s/oldstr/newstr/g

我想用目录中的新字符串替换所有旧字符串。当我执行此命令时,它会在控制台上显示所有字符串都更改为新字符串。但是当我进入文件并检查时,旧字符串仍然保持不变。请帮助解决问题

2 个答案:

答案 0 :(得分:0)

#> sed -i \.orig 's/old/new/g'  file

这应该与:

相同
#> mv file file.orig 

#> sed 's/old/new/g' file.orig > file. 

答案 1 :(得分:0)

如果你在macos中,你可以尝试:

sed -i '' 's/oldstr/newstr/g' your-file

来自男人:

  

就地编辑文件,使用指定的扩展名保存备份。如果给出了零长度扩展,则不会保存备份。

因此,使用-i ''时,它不会创建备份并对文件应用更改。

保留备份可以使用:

sed -i.bak 's/oldstr/newstr/g' your-file

要替换多个文件中的oldstr,您可以使用此功能:

perl -pi -e 's/oldstr/newstr/g' *

保留备份:

perl -i.bak -p -e 's/oldstr/newstr/g' *