我想通过命令行在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是文件的内容,并且已经执行了查找和替换。
为什么会这样?
命令的问题
sed 'code' file > file
该文件在sed实际处理它之前被shell截断。结果,您将得到一个空文件。
sed的方法是使用-i来就地编辑,正如其他答案所建议的那样。然而,这并不总是你想要的。-i将创建一个临时文件,然后用于替换原始文件。如果您的原始文件是一个链接(该链接将被一个常规文件取代),这就有问题了。如果你需要保存链接,你可以使用一个临时变量来存储sed的输出,然后再把它写回文件,就像这样:
tmp=$(sed 'code' file); echo -n "$tmp" > file
更好的是,使用printf而不是echo,因为echo在某些shell(例如dash)中很可能将\\处理为\:
tmp=$(sed 'code' file); printf "%s" "$tmp" > file