regex - 如何使用 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
模式匹配并捕获到第 1 组http://
orhttps://
中,然后再次匹配可选的http://
or https://
(以避免重复),然后匹配www
。替换 ,\1altwww
用第 1 组的内容替换匹配项www
并附加到它上面。
第二个命令查找一个^
(捕获到第 1 组)后跟一个可选altwww.
字符串(第 2 组),然后有一个字母数字字符、零个或多个非空格字符,然后.com
捕获到第 3 组(使用(\^)(altwww\.)?([[:alnum:]][^ ]*\.com)
)并替换为第 1 组值 + altwww.
+ 第 3 组值。
请参阅在线演示。
推荐阅读
- python - 如果我使用 update-alternatives 来管理 python 版本而不是 virtualenv 或 pyenv 会发生什么?
- pyspark - 如何通过两个布尔列过滤火花数据框
- node.js - 类型“{}”缺少“请求”类型的以下属性:get、header、accepts、acceptsCharsets 等 67 个
- c++ - gdb 找不到库的源文件
- javascript - 如何告诉 Vuelidate 的验证器接受“alphaNum”加字符点(“.”)?
- msix - 有什么办法可以远程执行 msixpackagingtool.exe
- javascript - Socket.IO - 我如何告诉服务器哪个特定客户端断开连接?
- node.js - 如何解决由于在循环/递归函数中使用猫鼬查询而出现的警告?
- javascript - 无法重新启用 boostrap 工具提示
- ios - MQTT IOS 无法向树莓派发送消息