与其删除旧版本,不如将它们存储为注释:
当我对配置文件进行一些修改时,我喜欢做很多备份,以便在出现问题时能够获得旧配置。
因此,我更喜欢制作旧行的注释副本,而不是替换(并确保只修改未注释的所需行):
sed -re "s/^(\s*Rewrite.*)\/~$(whoami)(.*$)/# &\n\1\2/" -i.bak .htaccess
比diff -u .htaccess{.bak,}
会产生:
--- .htaccess.bak 2013-09-07 18:44:07.043537404 +0200
+++ .htaccess 2013-09-07 18:46:35.236454686 +0200
@@ -1,6 +1,8 @@
RewriteEngine On<br />
-RewriteBase /~usern/<br />
+# RewriteBase /~usern/<br />
+RewriteBase /<br />
RewriteRule ^index\.php$ - [L]<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
-RewriteRule . /~usern/index.php [L]<br />
+# RewriteRule . /~usern/index.php [L]<br />
+RewriteRule . /index.php [L]<br />
解释:
查找包含Rewrite.*usern
. 将此行替换为注释标记 ( #
),后跟整行,而不是 anewline
和没有的同一行usern
因为\s*
是在括号中,所以任何类型的缩进都会在输出时复制。
当sed
使用 switch 运行时-i.bak
,未修改的旧版本文件将被存储为(这对于复制和注释未修改的旧行的语法.htaccess.bak
可能有点多余)。/# &\n...
它仅用于示例,因此您可以选择:
- 编辑时备份旧文件
- 编辑时备份旧行
- 编辑时备份行和文件
- 无需备份,因为您已经拥有强大而高效的备份解决方案。