用sed替换字符串工作但不保存文件

时间:2017-05-04 10:26:35

标签: string bash shell unix sed

我有一个名为matteo_test.sh的文件,其中包含字符串/nettools/python_64。 我想用/nettools/python_release/python278/替换此字符串。

我执行以下操作:

original_str='/nettools/python_64'
replace_str='/nettools/python_release/python278/'
sed "s~$original_str~$replace_str~" matteo_test.sh

执行该操作时,命令行会输出文件matteo_test.sh的全部内容。在这个输出的内容下,我可以看到字符串已被正确替换。

但是,文件本身的内容尚未修改,因为如果我重新打开它,我仍然会看到里面的旧字符串。

我执行的sed命令似乎正在替换为包含文件整个内容的字符串,而不是替换为文件本身。

我不是Unix Shell的专家,所以我可能错过了一个非常简单的观点:谁能帮我理解我做错了什么?

我的目的是将该字符串替换为文件。

1 个答案:

答案 0 :(得分:0)

尝试sed -i将内容保存到文件中,而不是在终端中打印输出

参考man sed

 -i[SUFFIX], --in-place[=SUFFIX]

              edit files in place (makes backup if extension supplied)

备份
如果您想使用sed -i.bak对现有文件进行备份。

示例:

sed -i.bak 's/search/patter/' file_name.txt

file_name.txt内容将随更新内容一起更改,但您仍有file_name.txt.bak

中的旧内容

注意:
在发布任何搜索之前,请搜索与该问题相关的google并阅读man页面,以便节省您的时间。