未终止的“s”命令——从 .sh 脚本运行 sed,以替换包含“=”的字符串

未终止的“s”命令——从 .sh 脚本运行 sed,以替换包含“=”的字符串

sed我在运行脚本时确实遇到了一个非常愚蠢但复杂的问题.sh,要替换包含 . 的字符串=

当我从终端执行时,我的命令sed -i 's/^host=.*/host=myhost1/' /opt/file.txt运行得很好。

但是,当我尝试从 .sh 文件执行此命令 CMD 时,它显示如下错误:

CMD="sed -i 's/^host=.*/host=myhost1/' /opt/file.txt"

我收到的错误是:

sed: -e expression #1, char 7: unterminated `s' command

查看错误,我发现这是=搜索/替换字符串中的问题。我尝试了转义这个以及许多其他选项,但都没有成功。即使我=从字符串中删除了,它在 .sh 中也能正常工作。

答案1

当您键入时CMD="sed -i 's/^host=.*/host=myhost1/' /opt/file.txt",您正在使用"(双引号),要求 shell 解释诸如 之类的特殊字符*

它将.*用当前目录中以 开头的所有文件的列表进行替换.,从而造成混淆sed

*使用反斜杠来消除特殊字符\*。还可以echo "$CMD"查看文件名。

相关内容