如何在shell脚本中替换变量的值?

时间:2014-02-24 18:58:14

标签: bash shell sed awk

在shell脚本文件中,假设有一行这样的行。

IP_address=192.168.1.12

从命令行,如何将其更改为?

IP_address=192.168.1.16

我认为“sed”可能无法完成,因为要替换的搜索字符串不是常量。也许“awk”?但我不是那么专家。非常感谢提示。

更具体地说,文件中的搜索模式是“x = y”,只能使用命令行工具替换为“x = z”。

额外,只是为了清除一些琐事

“y”不固定,只有“x”。

用简单的英语:我想在脚本中搜索变量“x”的定义,并将它定义的值更改为新值。我不关心(或不知道)“x”的旧值是什么,我只想将其更改为新值。

2 个答案:

答案 0 :(得分:1)

Sed会运行得很好:

$ sed -e "/^$Y=/s/=.*/=$X/" $script > $script.new

模式/<search>/s/<old>/<new>/表示:

  • 查找所有出现的<search>(将是以$Y=开头的行。)
  • 在线上替换等号及其后的所有内容。
  • 将其替换为=$X

请注意,整个脚本都是双引号,因此shell可以插入$X$Y

答案 1 :(得分:0)

使用awk,这是尽可能通用的:

awk -F= -v OFS="=" -v x="IP Address" -v y="192.168.1.16" '
    $1 == x {$2 = y} 1
' file > tmp && mv tmp file