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
相关产品推荐
相关产品推荐

