sed中未终止的`s'命令[重复]
Posted
技术标签:
【中文标题】sed中未终止的`s\'命令[重复]【英文标题】:unterminated `s' command in sed [duplicate]sed中未终止的`s'命令[重复] 【发布时间】:2018-05-29 17:50:06 【问题描述】:在一个简单的 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返回空。
跟进:不幸的是,当我使用双引号时,如 pii_ke 所述,变量的输出为空/空白。所以这是行不通的。也许这里还有其他问题?
【问题讨论】:
不确定到底是哪个字符导致了这种情况,但如果你不想引用正则表达式字符,你必须使用sed -E
为什么不分成多个命令而不是单个复杂的命令?并且不需要在那里使用cat
.. 只需执行grep 'string' filename
【参考方案1】:
因为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")'
【讨论】:
没关系,我错了。当我调用变量 defaultpass 时,输出为空。这就是我的意思是我已经用双引号试过了。起初我认为它有效,但我之前已经使用过这个变量(所以它仍然记得那个输入)。所以,如果我用你的例子;带双引号,我称变量为空白/空...? 试试defaultpass=$(vzctl exec $VEID '…')
。然后它将在当前范围内设置defaultpass
。以上是关于sed中未终止的`s'命令[重复]的主要内容,如果未能解决你的问题,请参考以下文章
通过 ssh 连接的 sed + `s' 的未知选项 [重复]