2016-08-02 9 views
-4

Ich habe Spalten in einer Datei. Einer ist der Name eines Wertes und der andere ist der entsprechende Wert. Ich möchte den Wert für bestimmte Namen ändern. So habe ich Infile:bash- kann nicht Zeilen in Datei ändern

TB   10 
Abs(M_1)   100 

Ive versucht, dies zu (unsuccesfully) ändern:

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

Wo ich M1 habe definiert unterschiedlich sein jedes iteration.I keine Fehler erhalte aber Der Dateiwert ändert sich nicht. Ich habe auch Dutzende von sed-Konfigurationen ausprobiert. Ich verstehe nicht, was ich falsch mache.

+2

Du hast das '$ (' von Zeile 1 ... – Siguza

+0

nie geschlossen) Sorry, das war ein Tippfehler. Wenn ich es nicht geschlossen hätte, würde Bash sich beschweren. –

+2

'M1_0 = $ (grep ...)' ist falsch. Sie haben ein Leerzeichen nach '='. Überprüfen Sie mit http://www.shellcheck.net/ – fedorqui

Antwort

0

Verwendung sed statt:

neue Datei zu erstellen:

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

in derselben Datei zu speichern (dies wird mv Schritt aus Ihrem Skript elinimate):

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