如果在执行“ sed -i-”时出错,该怎么办?

时间:2018-08-03 19:26:30

标签: shell unix sed

我正在尝试使用sed -i --查找并替换文件中的几个字符串。执行sed命令时出现错误,原始文件是否损坏?还是回滚到原始文件? 。我知道我是否给sed -i"SUFFIX" -- 它会在更改之前创建一个备份文件,但是成功执行后会删除备份文件吗?还是我们需要手动操作?

我正在寻找sed中的东西以进行适当的更改,但是在出现错误或问题时,它需要回滚所有更改,直到发生直到那时为止,然后按原样还给我原始文件。

我可以像下面那样做,但是正在寻找任何优化的解决方案:

sed 's/abc/def/g' file1 > tmp_file    
cp tmp_file file1

1 个答案:

答案 0 :(得分:3)

您对MonadUnliftIO的扩展名在unliftIO中的工作方式有误解。其唯一目的是在需要还原时按原样创建文件 的备份。您的要求非常完美!

如果您的原始命令在调用时由于语法错误而失败,则不会生成备份文件。请参阅以下内容

-i

如您所见,即使在强制命令失败的情况下,也不会创建备份文件。

sed

但是,请稍等,您已将$ echo 'foo' > file $ ls file $ cat file foo $ sed -i.bak 's/foo/bar/s' file sed: -e expression #1, char 11: unknown option to `s' $ cat file foo $ ls file 替换为错误,但想替换为$ sed -i.bak 's/foo/bar/g' file $ cat file bar $ ls file file.bak $ cat file.bak foo ,现在将文件还原回了

bar