Ich habe eine Datei, die diese Zeilen hat:
s17 line linewidth 1.0
s18 line linewidth 1.0
.
.
.
s28 line linewidth 1.0
ich durch diese Zeilen ersetzen möchten:
s17 line linewidth 2.0
s18 line linewidth 2.0
.
.
.
s28 line linewidth 2.0
ich habe diesen Code in bash geschrieben:
#!/bin/bash
for VARIABLE in {17..28}
do
sed 's/s${VARIABLE} line linewidth 1\.0/s${VARIABLE} line linewidth 2\.0/g' ./band-structure-calcite.agr
done
Dann habe ich den Code ausführen, indem bash change.sh > changed.txt
machen, aber die Datei changed.txt
nicht cont ain diesen Änderungen.
Ich würde mich sehr freuen, wenn Sie mir helfen und erklären mir die Syntax des Codes Antworten, wie ich lerne bash
Einfache Anführungszeichen interpolieren keine Variablen, doppelte Anführungszeichen tun dies. – choroba
Das Ausführen von 'sed' N-mal ist ineffizient und wird Ihnen viele doppelte Ausgabezeilen geben (N Kopien jeder Zeile mit * einem * jeder Kopie wurden entsprechend modifiziert). Wenn Sie nur "1.0" auf "2.0" in Zeilen ändern möchten, die mit diesen Zahlen übereinstimmen (und vermutlich nicht mit anderen), gibt es dafür bessere Möglichkeiten. –
@choroba: Ich habe das Skript geändert in: 'sed 's/s $ {VARIABLE} Zeilenbreite 1 \ .0/s $ {VARIABLE} Zeilenbreite 2 \ .0/g" ./band-structure-calcite. agr "und es funktioniert nicht –