为什么这个 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 管道中运行它或复制粘贴它时,它变成了一个多行命令,并且因此错误而失败。
解决方案是转义反斜杠