Sed 无法正常工作 - Shell 脚本
Sed not working in usual way - Shell scripting
我的 cook.sh
脚本中包含两个 sed
命令。一个命令是
sed -E -i "s/^(\$mainDomain=\")[^\"]+(\";)$/$MainDomain/" /var/config.php
这工作正常。
但是下面的命令几乎是一样的。但它不起作用。
sed -E -i "s/^(\$authURI=\")[^\"]+(\";)$/$duo_auth/" /var/config.php
给出以下错误信息
sed: -e expression #1, char 36: unknown option to `s'
对此有什么想法吗?
问题可能是由于您的替换变量 $duo_auth
具有未转义的 /
,请将默认 sed
分隔符从 /
更改为 ~
作为
sed -E -i "s~^(\$authURI=\")[^\"]+(\";)$~$duo_auth~" /var/config.php
不用-i
试一下,看看替换的是否符合预期,确认后再放回去
示例:-
cat /var/config.php
<?php
$authURI="dev.digin.io";
现在设置变量
duo_auth="http://auth.uri.digin.io:3048/"
现在更换,不用-i
sed -E "s~^(\$authURI=\")[^\"]+(\";)$~$duo_auth~" /var/config.php
<?php
$authURI="http://auth.uri.digin.io:3048/";
问题是可能 由于$duo_auth
包含未转义的/
。这意味着 sed
编辑脚本会出现语法错误。
您可以选择任何其他字符作为 s/.../.../
命令中的分隔符,例如 #
:
sed "s#....#....#"
只需确保您选择的角色永远不会出现在 $duo_auth
或 $authURI
中。
在测试时,我建议您避免对 sed
使用就地编辑 (-i
)。此外,-i
开关在 sed
实现之间非常不可移植(有些需要参数)。
反而稍微麻烦一点
sed -e "s#...#...#" data.in >data.in.tmp && mv -f data.in.tmp data.in
测试时,请在移动前检查 data.in.tmp
文件。
我的 cook.sh
脚本中包含两个 sed
命令。一个命令是
sed -E -i "s/^(\$mainDomain=\")[^\"]+(\";)$/$MainDomain/" /var/config.php
这工作正常。
但是下面的命令几乎是一样的。但它不起作用。
sed -E -i "s/^(\$authURI=\")[^\"]+(\";)$/$duo_auth/" /var/config.php
给出以下错误信息
sed: -e expression #1, char 36: unknown option to `s'
对此有什么想法吗?
问题可能是由于您的替换变量 $duo_auth
具有未转义的 /
,请将默认 sed
分隔符从 /
更改为 ~
作为
sed -E -i "s~^(\$authURI=\")[^\"]+(\";)$~$duo_auth~" /var/config.php
不用-i
试一下,看看替换的是否符合预期,确认后再放回去
示例:-
cat /var/config.php
<?php
$authURI="dev.digin.io";
现在设置变量
duo_auth="http://auth.uri.digin.io:3048/"
现在更换,不用-i
sed -E "s~^(\$authURI=\")[^\"]+(\";)$~$duo_auth~" /var/config.php
<?php
$authURI="http://auth.uri.digin.io:3048/";
问题是可能 由于$duo_auth
包含未转义的/
。这意味着 sed
编辑脚本会出现语法错误。
您可以选择任何其他字符作为 s/.../.../
命令中的分隔符,例如 #
:
sed "s#....#....#"
只需确保您选择的角色永远不会出现在 $duo_auth
或 $authURI
中。
在测试时,我建议您避免对 sed
使用就地编辑 (-i
)。此外,-i
开关在 sed
实现之间非常不可移植(有些需要参数)。
反而稍微麻烦一点
sed -e "s#...#...#" data.in >data.in.tmp && mv -f data.in.tmp data.in
测试时,请在移动前检查 data.in.tmp
文件。