【问题标题】:Changing contents of a specific parameter in a file through shell script [duplicate]通过shell脚本更改文件中特定参数的内容[重复]
【发布时间】:2021-08-03 11:09:22
【问题描述】:

我有一个名为 local.conf 的文件:

db.default.driver="com.mysql.jdbc.Driver"
db.default.url="jdbc:mysql://localhost:3306/xyz31"
db.default.user="ron"
db.default.password=""

这里xyz31 是变量${DB_NAME}。我只需要更新${DB_NAME}xyz31 (在这种情况下),但这取决于${DB_NAME} 的当前值是什么,并且需要更新为用户输入的任何值,例如例如:abc22.

db.default.driver="com.mysql.jdbc.Driver"
db.default.url="jdbc:mysql://localhost:3306/abc22"
db.default.user="ron"
db.default.password=""

有没有办法做到这一点?

【问题讨论】:

  • 关闭者:这个问题的答案不必在sed;将其与纯 sed 问题混为一谈会大大减少可能的答案集。
  • 例如...假设任何程序正在读取(和重新读取)配置文件本身就是一个 shell 脚本,将配置文件的第 2 行更改为使用参数扩展应该会自动产生所需的效果没有更多代码:db.default.url="jdbc:mysql://localhost:3306/${DB_NAME:-xyz31}"
  • 这不起作用,它不知道要编辑哪个文件并且没有文件名
  • 需要更多信息。读取配置文件的程序的名称是什么?该程序是用什么编程语言编写的?
  • Re "...而且没有文件名":不明白你的意思;请指定您所指的文件名。

标签: linux bash shell


【解决方案1】:

使用像 Unix'sed(1) 这样的编辑器:

  sed -i -e 's;xyz31;abc22; /your/funny/file/here

可能需要用单词开头/结尾来装饰以避免误报匹配(查看您的手册)。和/或写出另一个文件并与diff(1) 核对更改是否正确。

【讨论】:

  • 每次脚本运行时我都需要更改它。这里 xyz31 是变量 {DB_NAME} 并且应该根据输入的用户更新为 abc22。
【解决方案2】:

sed 应该够了:

i=abc22 # or input from user by read i
sed "/^db.default.url/s/$DB_NAME/$i/" local.conf

如果要更改文件,请添加 -i 选项。

【讨论】:

  • 每次脚本运行时我都需要更改它。这里 xyz31 是变量 {DB_NAME},它应该根据输入的用户更新为 abc22。
  • 好的,刚刚更新。
  • 这只替换db.default.driver,即abc22="jdbc:mysql://localhost:3306/xyz31"
猜你喜欢
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 2021-05-21
  • 2018-11-07
  • 1970-01-01
  • 2016-10-08
相关资源
最近更新 更多