2013-01-18 50 views
1

我有這樣的行的文本文件:如何使用常用shell命令替換變量的值?

variable_name : value 

我需要一個bash腳本與一個固定值,我知道替換「值」(讓我們說「myvalue的」)。

以前我不知道這是variable_name的值。

我需要使用,可以在像sed,grep,awk的Linux系統中的任何默認安裝中使用的bash命令等

我知道如何與SED做時,我知道了「價值」的字符串,但我無法弄清楚如何通過在變量名稱的文件中搜索來做到這一點。

編輯:我增加一些複雜這項任務,我必須排除有固定的文本的一些模式,例如,如果我有:

variable_name : value 
    variable_name : VARIABLE_NAME > lorem_ipsum 

我要排除以字符串VARIABLE_NAME更換。其結果必然是:

variable_name : myvalue 
    variable_name : VARIABLE_NAME > lorem_ipsum  

由於提前,

+1

爲新編輯的要求,案例不敏感?在所有情況下?例如VaRiabLe_NaMe呢?如果一個var看起來像是發生了什麼:'username:username'? – Kent

+0

是否允許有空格的值? –

+0

@SpencerRathbun:是 – Neuquino

回答

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 
+0

這與我所需要的非常接近,請檢查最近的編輯。謝謝 – Neuquino

+0

@Neuquino查看已更新的答案 – Kent

+0

不應觸及與VARIABLE_NAME相符的線條,但使用此解決方案,我們幾乎就在那裏! – Neuquino

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 
0

AWK方法:

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