我想从.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
但是这没有达到预期的效果。
答案 0 :(得分:2)
你可以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
答案 1 :(得分:1)
您在sed中寻找s
:
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 />
答案 2 :(得分: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
的行。将此行替换为注释标记(#
),后跟整行,而不是newline
和没有usern
的同一行
由于括号中的\s*
,因此会在输出处复制任何类型的缩进。
使用切换器sed
运行-i.bak
时,较旧的未修改版本的文件将存储为.htaccess.bak
(这可能有点冗余与语法/# &\n...
谁会复制和评论未修改的旧行。)
这仅适用于样本,因此您可以选择: