我正在尝试使用sed -i --
查找并替换文件中的几个字符串。执行sed命令时出现错误,原始文件是否损坏?还是回滚到原始文件? 。我知道我是否给sed -i"SUFFIX" --
它会在更改之前创建一个备份文件,但是成功执行后会删除备份文件吗?还是我们需要手动操作?
我正在寻找sed中的东西以进行适当的更改,但是在出现错误或问题时,它需要回滚所有更改,直到发生直到那时为止,然后按原样还给我原始文件。
我可以像下面那样做,但是正在寻找任何优化的解决方案:
sed 's/abc/def/g' file1 > tmp_file
cp tmp_file file1
答案 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