我知道您可以指定-i.bak
,但我不想处理必须删除.bak
文件,即使它很简单:
find . -name '*.bak' -exec rm {} \;
我是否可以通过某种方式审核sed
,以便默认情况下,只要我指定-i
,它就会将其内联替换的每个文件都备份为/www/backups
?
答案 0 :(得分:3)
如果您只想在没有任何备份文件的情况下进行内联替换,请关闭扩展程序:sed -i 's/pat/rep/'
。
至于其他地方的备份,GNU sed说:
遵循以下规则:如果扩展名不包含*,那么它 被附加到当前文件名的末尾作为后缀;如果 扩展名包含一个或多个*字符,然后每个星号都包含 替换为当前文件名。这允许您添加前缀 备份文件,而不是(或除了)后缀,甚至是 将原始文件的备份副本放入另一个目录 (如果目录已存在)。
备份“后缀”中的星号将替换为文件名(包括路径 - 因此,如果您有子文件夹,则需要先在备份目录中创建它们。)
% seq 5 > file
% sed -i'backups/*.bak' s/3/c/ file
% cat file
1
2
c
4
5
% cat backups/file.bak
1
2
3
4
5
%