在文件中查找和替换,覆盖文件无效,它清空文件

在文件中查找和替换,覆盖文件无效,它清空文件

我想通过命令行在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是文件的内容,并且已执行查找和替换。

为什么会发生这种事?


千巷猫影
浏览 718回答 3
3回答

牧羊人nacy

当壳看见> index.html在命令行中,它打开文件。index.html为写字把以前所有的内容都删掉了。要解决这个问题,您需要通过-i选择sed若要内联进行更改并在原始文件进行就地更改之前创建原始文件的备份,请执行以下操作:sed -i.bak s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html如果没有.bak,命令将在某些平台(如MacOSX)上失败。

慕尼黑5688855

另一种有用的模式是:sed -e 'script script' index.html > index.html.tmp && mv index.html.tmp index.html具有相同的效果,而不使用-i选项,另外还意味着,如果sed脚本由于某种原因失败,则输入文件不会被关闭。此外,如果编辑成功,周围就没有备份文件了。这种成语在makefiles中很有用。相当多的SED-i选项,但不是所有选项;POSIX sed不是这样的;因此,如果您的目标是可移植性,最好避免。

长风秋雁

sed -i 's/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g' index.html这在index.html文件上执行全局就地替换。引用字符串可以防止查询和替换中的空白出现问题。
打开App,查看更多内容
随时随地看视频慕课网APP