我想通过命令行在 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内容,并且已经执行了查找和替换。
stdout
为什么会这样?
当 shell 在命令行中看到 > index.html它时,它会打开index.html要 写入 的文件,抹去之前的所有内容。
> index.html
index.html
要解决此问题,您需要传递-i选项以sed进行内联更改并在原地进行更改之前创建原始文件的备份:
-i
sed
sed -i.bak s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html
如果没有 .bak,该命令将在某些平台上失败,例如 Mac OSX。