我想使用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上。
答案 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变量时),你应该做更多。