【发布时间】:2011-08-22 18:28:23
【问题描述】:
我想在配置文件中搜索此表达式:“central.database”。 然后我想将与“central.database”关联的设置更改为“SQLTEST”。
配置文件的布局最初如下所示:
central.database = SQLFIRSTTEST
这是我希望它在 sed 替换后的样子:
central.database = SQLTEST
我在 bash 脚本中执行此操作,欢迎任何建议、建议或替代解决方案!
(其实central.database和SQLTEST都来自这里的bash变量。)
我当前的代码(第三次尝试):
sshRetValue=$(ssh -p "35903" -i $HOME/sshids/idrsa-1.old ${1} <<EOF
sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
echo $?
EOF
)
错误信息:
Pseudo-terminal will not be allocated because stdin is not a terminal.
sed: -e expression #1, char 58: unknown option to `s'
-bash: line 3: EOF: command not found
【问题讨论】:
-
这被标记为linux,但答案大部分可移植到其他平台。 *BSD(包括 MacOS)用户希望使用
sed -i "",而 Linux 只允许使用sed -i。平台之间sed语法的细节也会有差异,但简单的s/foo/bar/应该是完全可移植的。