2

我知道您可以指定-i.bak,但我不想处理必须删除.bak文件的问题,即使它很简单:

find . -name '*.bak' -exec rm {} \;

有什么方法可以审核sed,以便默认情况下,只要我指定-i它支持它内联替换的每个文件,例如/www/backups

4

1 回答 1

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
%
于 2012-05-14T18:02:14.063 回答