如何使用sed替换http或https ?



我在.htaccess中有以下字符串:

https://www.example.com/index.php?language=french 
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

这是我期望的输出:

https://altwww.example.com/index.php?language=french 
RewriteCond %{HTTP_HOST} ^altwww.example.com [NC]
RewriteRule ^(.*)$ http://altwww.example.com/$1 [L,R=301]

我已经试过了:

old_domain="https?://www"
new_domain="https?://altwww"
sed -i -e "s/${old_domain}/${new_domain}/g" /path/to/my/.htaccess

可以使用

old_domain='(https?://)(https?://)?www'
new_domain='1altwww'
old_domain2='(^)(altwww.)?([[:alnum:]][^ ]*.com)'
new_domain2='1altwww.3'
sed -i -E "s/${old_domain}/${new_domain}/g;s/${old_domain2}/${new_domain2}/g" /path/to/my/.htaccess

-E选项启用POSIX ERE语法。

(https?://)(https?://)?www模式匹配并捕获到组1http://https://,然后再匹配一个可选的http://https://(以避免重复),然后匹配www。替换的1altwww用第1组的内容和附加的www替换匹配。

第二个命令查找^(捕获到组1),后跟一个可选的altwww.字符串(组2),然后有一个字母数字字符,零个或多个非空格字符,然后是捕获到组3(与(^)(altwww.)?([[:alnum:]][^ ]*.com))的.com,并替换为组1值+altwww.+组3值。

查看在线演示

这似乎适用于所有情况:

sed -e 'sN(http(s|)://www.|)example.comN1altwww.example.comN' .htaccess

旧的无效答案:此命令将http[s]://www.example.com的所有出现更改为主机altwwww:

sed -e 'sN(https?://)wwwN1altwwwN' .htaccess

但是如果你想改变www.example.com的所有出现,你可以使用

sed -e 'sNexample.comNaltwww.example.comN' .htaccess

最新更新