为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千巷猫影 2019-07-05 18:42:07
在文件中查找和替换,覆盖文件无效,它清空文件我想通过命令行在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是文件的内容,并且已执行查找和替换。为什么会发生这种事?
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

看见> index.html在命令行中,它打开文件。index.html写字把以前所有的内容都删掉了。

要解决这个问题,您需要通过-i选择sed若要内联进行更改并在原始文件进行就地更改之前创建原始文件的备份,请执行以下操作:

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

如果没有.bak,命令将在某些平台(如MacOSX)上失败。


查看完整回答
反对 回复 2019-07-05
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

另一种有用的模式是:

sed -e 'script script' index.html > index.html.tmp && mv index.html.tmp index.html

具有相同的效果,而不使用-i选项,另外还意味着,如果sed脚本由于某种原因失败,则输入文件不会被关闭。此外,如果编辑成功,周围就没有备份文件了。这种成语在makefiles中很有用。

相当多的SED-i选项,但不是所有选项;POSIX sed不是这样的;因此,如果您的目标是可移植性,最好避免。


查看完整回答
反对 回复 2019-07-05
?
长风秋雁

TA贡献1757条经验 获得超7个赞

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

这在index.html文件上执行全局就地替换。引用字符串可以防止查询和替换中的空白出现问题。


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 717 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信