Bash Sed查找并删除单个单词
我想从Bash Sed查找并删除单个单词,bash,sed,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
.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
但这并没有达到预期的结果。您正在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 />
kent$cat文件
重新启动引擎
RewriteBase/~usern/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-f
重写cond%{REQUEST_FILENAME}-d
重写规则/~usern/index.php[L]
kent$sed的#/~usern##g'文件
重新启动引擎
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-f
重写cond%{REQUEST_FILENAME}-d
重写规则/index.php[L]
您正在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 />
kent$cat文件
重新启动引擎
RewriteBase/~usern/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-f
重写cond%{REQUEST_FILENAME}-d
重写规则/~usern/index.php[L]
kent$sed的#/~usern##g'文件
重新启动引擎
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-f
重写cond%{REQUEST_FILENAME}-d
重写规则/index.php[L]
您可以sed-i“s//$(whoami)//g.htaccess
如果只想删除行中的第一个条目,请删除最后一个g
选项
sed-i(内联sed,直接在文件上执行操作)“s/find_this/replace_with_this/”(搜索并替换)
如果要搜索~/username并删除它,而不仅仅是用户名条目,只需将表达式更改为:
sed-i“s/~\/$(whoami)//g.htaccess
您可以sed-i“s/$(whoami)//g.htaccess
如果只想删除行中的第一个条目,请删除最后一个g
选项
sed-i(内联sed,直接在文件上执行操作)“s/find_this/replace_with_this/”(搜索并替换)
如果要搜索~/username并删除它,而不仅仅是用户名条目,只需将表达式更改为:
sed-i“s/~\/$(whoami)//g”.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 />
--.htaccess.bak 2013-09-07 18:44:07.043537404+0200
+++.htaccess 2013-09-07 18:46:35.236454686+0200
@@ -1,6 +1,8 @@
重新启动引擎
-RewriteBase/~usern/
+#RewriteBase/~usern/
+重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-f
重写cond%{REQUEST_FILENAME}-d
-重写规则/~usern/index.php[L]
+#重写规则/~usern/index.php[L]
+重写规则/index.php[L]
说明:
查找包含Rewrite.*usern
的行。将此行替换为注释标记(#
),然后是整行,而不是换行符
和不带usern的同一行
由于括号中的\s*
是,因此任何类型的缩进都将在输出时再现
当使用开关-i.bak
运行sed
时,较旧的未修改版本的文件将存储为.htaccess.bak
(这可能与将复制和注释未修改的旧行的syntax/\n..
有点冗余)
仅用于样品,因此您可以选择:
- 编辑时备份旧文件
- 编辑时备份旧行
- 编辑时备份行和文件
- 无需备份,因为您已经有了一个强大而高效的备份解决方案
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 />
--.htaccess.bak 2013-09-07 18:44:07.043537404+0200
+++.htaccess 2013-09-07 18:46:35.236454686+0200
@@ -1,6 +1,8 @@
重新启动引擎
-RewriteBase/~usern/
+#RewriteBase/~usern/
+重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-f
重写cond%{REQUEST_FILENAME}-d
-重写规则/~usern/index.php[L]
+#重写规则/~usern/index.php[L]
+重写规则/index.php[L]
说明:
查找包含Rewrite.*usern
的行。将此行替换为注释标记(#
),然后是整行,而不是换行符
和不带usern的同一行
由于括号中的\s*
是,因此任何类型的缩进都将在输出时再现
当使用开关-i.bak
运行sed
时,较旧的未修改版本的文件将存储为.htaccess.bak
(这可能与将复制和注释未修改的旧行的syntax/\n..
有点冗余)
仅用于样品,因此您可以选择:
- 编辑时备份旧文件
- 编辑时备份旧行
- 编辑时备份行和文件
- 无需备份,因为您已经拥有强大而高效的