如何使用`sed`替换文件中的字符串?

时间:2015-08-14 07:52:04

标签: regex bash sed

我想使用sed来替换字符串。我尝试了两种方法:

sed -i 's/string_catcher/new_string/g' <file_name>

这会导致错误,因为它不会正确处理参数。 This是我的信息来源。

然后,我想我可以写信给文件:

sed 's/string_catcher/new_string/g' <file_name> > <file_name>

作为一种解决方法,我考虑将其写入新文件并通过覆盖将其复制回旧文件。但是这个不会工作,因为文件很大。只需几分钟即可在vim中打开。

但是,这会导致文件为空。为什么这些没用?解决方案?感谢。

我在OSX Darwin Kernel 14.4上。

2 个答案:

答案 0 :(得分:0)

选项-i在Linux和OSX上具有不同的语法。

如果您希望sed修改原始文件而不在Linux上制作备份副本,则不要向-i提供任何参数:

sed -i 's/string_catcher/new_string/g'  <file_name>

在OSX上,您必须提供一个空字符串作为-i的参数:

sed -i '' 's/string_catcher/new_string/g'  <file_name>

答案 1 :(得分:0)

在您的链接上,您可以找到&#34;解决方法&#34;没有-i选项的工作。 您只需使用临时文件即可使其正常工作。在sed命令期间不要覆盖现有文件:

sed 's/string_catcher/new_string/g' file_name > file_name_2 && mv file_name_2 file_name

当string_catcher或new_string包含特殊字符时(或者当你想插入一个shell变量时),你应该做更多。