我想在配置文件中搜索此表达式:“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
原文由 prolink007 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是一个示例表达式:
如果你想在里面匹配
/
的东西,你可以使用另一个分隔符:或使用变量扩展:
在您的示例中:
$CENTRAL_DB_NAME 之前有一个无效的 \1。此外, sed 不会打印它的返回值。这是检查返回值的首选方法:
并最终通过管道连接到 ssh(未测试):
-i 用于替换输入文件中的数据。否则 sed 写入标准输出。
正则表达式是他们自己的一个领域。除非有一些特定的功能让您无法理解,否则无法在 stackoverflow 答案中深入解释它们。