小编典典

在文件中查找和替换并覆盖文件不起作用,它会清空文件

all

我想通过命令行在 HTML 文件上运行查找和替换。

我的命令看起来像这样:

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html > index.html

当我运行它并随后查看文件时,它是空的。它删除了我文件的内容。

当我再次恢复文件后运行它时:

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html

是文件的stdout内容,并且已经执行了查找和替换。

为什么会这样?


阅读 101

收藏
2022-03-06

共1个答案

小编典典

shell 在命令行中看到 > index.html它时,它会打开index.html写入 的文件,抹去之前的所有内容。

要解决此问题,您需要传递-i选项以sed进行内联更改并在原地进行更改之前创建原始文件的备份:

sed -i.bak s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html

如果没有 .bak,该命令将在某些平台上失败,例如 Mac OSX。

2022-03-06