Sed查找并删除单个单词

时间:2013-04-06 20:35:14

标签: bash sed

我想从.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

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

3 个答案:

答案 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...谁会复制和评论未修改的旧行。)

这仅适用于样本,因此您可以选择:

  • 编辑时备份旧文件
  • 编辑时备份旧行
  • 在编辑时备份行和文件
  • 备份,因为您已经拥有强大而高效的备份解决方案。