我试图使用sed -i --查找和替换文件中的几个字符串。在执行sed命令时出现了什么错误,原始文件是否已损坏?还是它回滚回原来的文件?我知道如果我给sed -i"SUFFIX" --一个备份文件,它会在修改之前创建一个备份文件,但是它在成功执行备份文件时会删除它吗?还是我们需要手动完成?
我正在寻找一些东西在sed中进行更改,但是在出错或出现问题时,它需要回滚所有更改,直到发生为止,并将原始文件原样还给我。
我可以这样做,但寻找任何优化的解决方案:
sed 's/abc/def/g' file1 > tmp_file
cp tmp_file file1发布于 2018-08-03 19:39:31
您对带有扩展的-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错误地替换了,但是您想用foobar替换,现在将文件还原回
$ mv file.bak file
$ ls
file
$ cat file
foohttps://stackoverflow.com/questions/51678976
复制相似问题