linux - 如何使用 sed 更改我的配置文件,具有灵活的键和值?

标签 linux bash sed

我想搜索这个表达式的配置文件:“central.database”。 然后我想将与“central.database”关联的设置更改为“SQLTEST”。

配置文件的布局最初看起来像这样:

central.database = SQLFIRSTTEST

这是我希望它在 sed 替换后的样子:

central.database = SQLTEST

我在 bash 脚本中执行此操作,欢迎提出任何建议、建议或替代解决方案!

(实际上 central.databaseSQLTEST 都来自这里的 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

最佳答案

sed -i -e '/central\.database =/ s/= .*/= new_value/' /path/to/file

解释:

  • -i 告诉 sed 将结果保存到输入文件中。没有它,sed 会将结果打印到标准输出。
  • /central\.database =/ 匹配斜线之间包含字符串的行:central.database =. 被转义,因为它是正则表达式中的特殊字符。
  • s/OLD/NEW/ 部分执行s替换。 OLD 字符串是要匹配的正则表达式,NEW 部分是要替换的字符串。
  • 在正则表达式中,.* 表示“匹配任何内容”。所以 = .* 匹配等号、空格,然后是其他任何内容。

关于linux - 如何使用 sed 更改我的配置文件,具有灵活的键和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40171075/

相关文章:

c# - 命名互斥体的单声道替代品

linux - 如何抑制/重定向 grep 背景错误?

bash - 使用 bash 脚本为 Sublime Text 2 构建系统

awk - 如何解析bhist日志

linux - 如何创建自己的 Linux 控制台应用程序?

linux - 服务器上的 Git 没有 SSH 访问权限

bash - 在 bash 中传递空变量

linux - ubuntu Gnome 中没有 bashrc

bash - 从 40900000 拆分为 409-00-000

awk - 为每个 n 列值创建新行,同时保持第 1 列值