1

我有一个带有如下行的文本文件:

  variable_name : value

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

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

我需要使用 bash 命令,这些命令可用于任何默认安装的 linux 机器,如 sed、grep、awk 等。

当我知道“值”字符串时,我知道如何使用 sed 执行此操作,但我无法通过在文件中搜索变量名称来弄清楚如何执行此操作。

编辑:我为这项任务增加了一些复杂性,我必须排除一些带有固定文本的模式,例如,如果我有:

  variable_name : value
  variable_name : VARIABLE_NAME > lorem_ipsum

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

  variable_name : myvalue
  variable_name : VARIABLE_NAME > lorem_ipsum     

提前致谢,

4

3 回答 3

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

编辑2

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
于 2013-01-18T13:48:30.447 回答
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
于 2013-01-18T13:57:53.713 回答
0

awk 方法:

echo "  variable_name : value" | awk -F: -v OFS=: '/variable_name/{ $2=" value2"}1'
于 2013-01-18T13:59:09.763 回答