sed 中未终止的 `s' 命令

unterminated `s' command in sed

下面的命令被用在一个简单的 bash 脚本中 以获取 MySQL 5.7.

中的临时密码
vzctl exec $VEID 'defaultpass=$(cat /var/log/mysqld.log | grep "A temporary password is generated for" | tail -1 | sed -n 's/.*root@localhost: //p')'

但是当我运行测试命令时它说如下:

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

有人可以解释一下我做错了什么吗?我绝不是专家,但我认为这是正确的。我也尝试用“替换',但这没有用。然后没有错误,但是 $defaultpass returns 为空。

跟进:不幸的是,当我使用双引号时,如pii_ke所述,变量的输出为空/空白。所以那是行不通的。也许这里还有其他问题?

因为 vzctl 命令的整个第三个参数都用单引号引起来。您应该将 sed 命令放在双引号内:

vzctl exec $VEID 'defaultpass=$(cat /var/log/mysqld.log | grep "A temporary password is generated for" | tail -1 | sed -n "s/.*root@localhost: //p")'