2013-05-21 17 views
0

我有一個文件,該文件的一部分如下文件:改寫在bash

OUTPUT_FILENAME="out.Received.Power.x.0.y.1.z.0.41 
X_TX=0 
Y_TX=1 
Z_TX=0.41 

我想自動改變它的某些部分與BASH:每次看到OUTPUT_FILENAME時間我想了在它旁邊寫下名稱並用新的名稱進行更改。然後我想對值X_TX,Y_TX和Z_TX做同樣的操作:刪除它旁邊的值並重寫一個新值。例如,而不是X_TX = 0,我想X_TX = 0.3或反之亦然。 你認爲這是可能的也許使用grep左右..

回答

0

您可以用sed是這樣的:

即更換X_TX =與X_TX = 123你可以這樣做:

sed -i -e 's/X_TX=.*/X_TX=123/g' /tmp/file1.txt 
+0

是正是我剛剛發現的問題是,我想改變它的價值在一段時間,所以我會反覆變化!必須做一些像'sed -i -e's/T_XT =。*/X_TX =「$ X」/ g'file.dat',但它不起作用,它只是寫入$ X,但我希望X中的值不只是$ X! – ayasha

+0

它是引號 - 用於外部引號和''用於內部引用:sed -i -e「s/T_XT =。*/X_TX ='$ X'/ g」file.dat – naumcho

0

一選項使用awk。當存在匹配,你的價值觀是作爲變量的awk腳本傳遞和取代:

awk -v outfile="str_outfile" -v x_tx="str_x" -v y_tx="str_y" -v z_tx="str_z" ' 
    BEGIN { FS = OFS = "=" } 
    $1 == "OUTPUT_FILENAME" { $2 = outfile; print; next } 
    $1 == "X_TX" { $2 = x_tx; print $0; next } 
    $1 == "Y_TX" { $2 = y_tx; print $0; next } 
    $1 == "Z_TX" { $2 = z_tx; print $0; next } 
' infile