2016-08-02 33 views
-4

我必須在文件中的列。一個是一個值的名稱,另一個是相應的值。我想更改分配給特定名稱的值。所以,我有 INFILE:bash-無法更改文件中的行

TB   10 
Abs(M_1)   100 

我用盡這(unsuccesfully)更改:

M1_0=$(grep "Abs(M_1)" $infile) 
awk '{ gsub("$M1_0", "Abs(M_1)   $M1") };{print}' $infile > $infile.new 
mv $infile.new $infile 

當我定義M1是不同的每iteration.I沒有得到任何錯誤,但文件值不會更改。我也嘗試了幾十個sed配置。我不明白我做錯了什麼。

+2

你從來沒有關閉'$('從第1行... ... – Siguza

+0

抱歉,這是一個錯字。如果我沒有關閉它,bash會抱怨。 –

+2

'M1_0 = $(grep ...)'是錯誤的。在'='後面有一個空格。請檢查http://www.shellcheck.net/ – fedorqui

回答

0

使用sed代替:

創建新的文件:

sed "s/$M1_0/Abs(M_1)   $M1/g" $infile > $infile.new 

在同一文件中保存(這將elinimate從腳本mv步驟):

sed -i "s/$M1_0/Abs(M_1)   $M1/g" $infile