用bash覆盖文件

时间:2013-05-21 20:00:14

标签: bash awk

我有一个文件,其中一部分如下所示:

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左右......

2 个答案:

答案 0 :(得分:0)

您可以像这样使用sed:

即。要用X_TX = 123替换X_TX =,你可以这样做:

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

答案 1 :(得分: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