You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本sed命令报错:unknown option to `s',求修复方案

修复sed命令的"unknown option to `s'"错误

问题原因

sed的s命令默认以/作为匹配、替换文本的分隔符,你的替换内容中包含多个/(比如https://$serverName/里的斜杠),这些斜杠会被sed误识别为命令的分隔符,导致语法解析失败。

解决方案

更换一个不会出现在匹配/替换内容里的字符作为s命令的分隔符,比如|或@,避免和内容中的/冲突。

修改后的脚本示例(用|作为分隔符):

vhostConfig=$(cat "/etc/apache2/sites-available/$serverName.conf")
vhostConfig=$(echo "$vhostConfig" | sed "s|<VirtualHost \*:80>|<VirtualHost *:80>\nRewriteEngine On\nRewriteCond %{HTTPS} !=on\nRewriteRule ^/?(.*) https://$serverName/ [R,L]|")

或者用@作为分隔符:

vhostConfig=$(cat "/etc/apache2/sites-available/$serverName.conf")
vhostConfig=$(echo "$vhostConfig" | sed "s@<VirtualHost \*:80>@<VirtualHost *:80>\nRewriteEngine On\nRewriteCond %{HTTPS} !=on\nRewriteRule ^/?(.*) https://$serverName/ [R,L]@")

注意:如果改用单引号包裹sed命令,变量$serverName无法被Bash解析替换,所以必须保留双引号,通过更换分隔符来解决斜杠冲突问题。

内容的提问来源于stack exchange,提问作者Salocin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:40:17