如何使用常见的shell命令替换变量的值?

时间:2013-01-18 13:45:05

标签: bash replace

我有一个包含这样的行的文本文件:

  variable_name : value

我需要制作一个bash脚本,用我知道的固定值替换“value”(比如说“myvalue”)。

我以前不知道哪个是variable_name的值。

我需要使用bash命令,可以在linux框的任何默认安装中使用,如sed,grep,awk等。

当我知道“value”字符串时,我知道如何使用sed,但我无法通过在变量名称中搜索文件来弄清楚如何做到这一点。

编辑:我为此任务添加了一些复杂性,我必须使用固定文本排除某些模式,例如,如果我有:

  variable_name : value
  variable_name : VARIABLE_NAME > lorem_ipsum

我必须使用字符串VARIABLE_NAME排除替换。结果必须是:

  variable_name : myvalue
  variable_name : VARIABLE_NAME > lorem_ipsum     

提前致谢,

3 个答案:

答案 0 :(得分:3)

你正在寻找这个吗?

echo "variable_name : value"|sed -r 's/(variable_name :)(.*)/\1myvalue/'
variable_name :myvalue
新要求

编辑

您说您将使用字符串VARIABLE_NAME排除替换,因此我假设(space)> lorem_ipsum将被新值替换。

所以这一行可能会有所帮助:

awk 'BEGIN{v="variable_name";V=toupper(v); FS=OFS=" : "} $1~"^"v{$2=($2~"^"V)?V"myValue":"myValue"}1' file

看看这个:

kent$  echo "variable_name : value
variable_name : VARIABLE_NAME > lorem_ipsum"|awk 'BEGIN{v="variable_name";V=toupper(v); FS=OFS=" : "} $1~"^"v{$2=($2~"^"V)?V"myValue":"myValue"}1';                         
variable_name : myValue
variable_name : VARIABLE_NAMEmyValue

<强> EDIT2

Neuquino,你应该更清楚地解释你的要求......无论如何:

 kent$  echo "variable_name : value
variable_name : VARIABLE_NAME > lorem_ipsum"|awk 'BEGIN{v="variable_name";V=toupper(v); FS=OFS=" : "} $1~"^"v && $2!~"^"V{$2="myValue"}1';                                  
variable_name : myValue
variable_name : VARIABLE_NAME > lorem_ipsum

答案 1 :(得分:0)

awk -F":" 'BEGIN{OFS=":"}/variable_name/{$2="my value"}1' your_file

你也可以使用perl:

perl -pe 'if(/variable_name/){$_=~s/(variable_name :).*/$1 myvalue/g;}' your_file

如果你想进行原地替换:

perl -pi -e 'if(/variable_name/){$_=~s/(variable_name :).*/$1 myvalue/g;}' your_file

答案 2 :(得分:0)

awk方法:

echo "  variable_name : value" | awk -F: -v OFS=: '/variable_name/{ $2=" value2"}1'