为什么 sed 输出“char 53:未终止的`s'命令”

为什么 sed 输出“char 53:未终止的`s'命令”

为什么这个 bash 脚本

ssh $SERVER bash <<EOF
sed -i "s/database_name: [^ ]*/database_name: kartable_$ME" $PARAM_FILE
exit
EOF

输出->

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

答案1

s,中的命令使用sed特定语法:

s/AAAA/BBBB/options

其中s是替换命令,AAAA是要替换的正则表达式,BBBB是您希望替换的内容,options是替换命令的任何选项,例如全局 ( g) 或忽略大小写 ( i)。

在您的具体情况下,您缺少最后的斜线/,如果您添加它,sed就可以正常工作:

➜  ~  sed 's/database_name: [^ ]*/database_name: kartable_$ME/'
database_name: something
database_name: kartable_$ME

info sed 'The "s" Command'包括 s 命令的完整描述和用法。

答案2

/最后失踪了。

sed -i "s/database_name: [^ ]*/database_name: kartable_$ME/" $PARAM_FILE

答案3

就我而言(一个不寻常的问题),我的 sed 命令中有一个 \n 。当我在 Jenkins 管道中运行它或复制粘贴它时,它变成了一个多行命令,并且因此错误而失败。

解决方案是转义反斜杠

相关内容