用 sed 替换字符串可以工作,但不能保存文件

Mat*_*NNZ 5 unix string bash shell 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
Run Code Online (Sandbox Code Playgroud)

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

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

看来sed我执行的命令是将替换替换为包含文件全部内容的字符串,而不是替换为文件本身。

我不是 Unix Shell 的专家,所以我可能错过了一个非常简单的点:任何人都可以帮助我理解我做错了什么吗?

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

Kal*_*dhi 8

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

参考man sed

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

              edit files in place (makes backup if extension supplied)
Run Code Online (Sandbox Code Playgroud)

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

例子:

sed -i.bak 's/search/patter/' file_name.txt
Run Code Online (Sandbox Code Playgroud)

file_name.txt内容将随着更新的内容而改变,但仍然有旧内容file_name.txt.bak

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