1

我想从.htaccess文件中删除用户名。

示例.htaccess

RewriteEngine On
RewriteBase /~usern/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /~usern/index.php [L]

我想给我们一种动态命令,因为我不必/~username每次都为每个用户手动输入。

我试过

sed 's/$whoami##g' .htaccess

但这并没有达到预期的效果。

4

3 回答 3

3

你可以sed -i "s/$(whoami)//g" .htaccess

如果您只想删除一行中的第一个条目,请删除最后一个g选项。

sed -i (inline sed, do actions directly on file) "s/find_this/replace_with_this/" (search and replace)

如果您想搜索 ~/username 并删除它而不是仅删除用户名条目,只需将表达式更改为:

sed -i "s/~\/$(whoami)//g" .htaccess

于 2013-04-06T22:32:29.167 回答
1

s您在 sed中寻找:

 sed 's#/~usern##g' file

用你的例子:

kent$  cat file
RewriteEngine On<br />
RewriteBase /~usern/<br />
RewriteRule ^index\.php$ - [L]<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteRule . /~usern/index.php [L]<br />

kent$  sed 's#/~usern##g' file
RewriteEngine On<br />
RewriteBase /<br />
RewriteRule ^index\.php$ - [L]<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteRule . /index.php [L]<br />
于 2013-04-06T20:43:02.467 回答
1

与其删除旧版本,不如将它们存储为注释:

当我对配置文件进行一些修改时,我喜欢做很多备份,以便在出现问题时能够获得旧配置。

因此,我更喜欢制作旧行的注释副本,而不是替换(并确保只修改未注释的所需行):

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...

它仅用于示例,因此您可以选择:

  • 编辑时备份旧文件
  • 编辑时备份旧行
  • 编辑时备份行和文件
  • 无需备份,因为您已经拥有强大而高效的备份解决方案。
于 2013-11-11T06:50:19.157 回答