我有一个包含这样的行的文本文件:
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
提前致谢,
答案 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'