2016-02-05 28 views
1

我正在尋找與文件中的模式相匹配的bash命令,並用該腳本詢問用戶的輸入替換該行的剩餘部分。就像那樣可能在bash腳本中?使用用戶的輸入替換模式匹配後的剩餘部分

例如:我有另一個程序的輸入文件的文件。我希望使用bash腳本更改它的部分。

karyotype ='red.txt' 
chromosomes_units = 1000000 


<ideogram> 

<spacing> 
default = 0.001r 
</spacing> 

radius = 0.9r 
thickness = 20p 
fill  = yes 

所以,是有可能,我可以基於用戶prompt.For例如用grep/sed的命令搜索「核型=」和改變線的剩餘部分,我希望將red.txt更改爲任意文件名由用戶提供。

+1

你可以添加一個例子嗎? –

回答

2

您可以使用此sed

# user input string 
str='foo.bar' 

# use sed for replacement 
sed -i.bak "s~^\(*karyotype *= *\).*$~\1'$str'~" input 

# check results 
cat input 
karyotype ='foo.bar' 
chromosomes_units = 1000000 


<ideogram> 

<spacing> 
default = 0.001r 
</spacing> 

radius = 0.9r 
thickness = 20p 
fill  = yes 

或者你可以使用這個安全awk當你不知道str事前的價值:

awk -v str="'a&b'" 'BEGIN{FS=OFS="="} $1=="karyotype "{$2=str} 1' file 
+0

嘗試使用'str ='a&b''和'str ='a〜b''進行測試。 – pjh

+0

@pjh:用'awk'檢查更新後的答案 – anubhava