Ich bekomme da schon früher einen Fehler:
| Windvar=$(cat Windgeschwindigkeit3.txt) = 6.1 km/h
cat: Windgeschwindigkeit3.txt: Datei oder Verzeichnis nicht gefunden
=: Befehl nicht gefunden.
|
Oder soll das hintere nur ein Kommentar sein, der besagen will, dass 6.1 km/h das erwartete Ergebnis ist?
Das würde man mit einem Kommentar darstellen. Kommentare gehen vom Hash bis zum Zeilenende:
Windvar=$(cat Windgeschwindigkeit3.txt) # = 6.1 km/h
Wenn die Variable ein Leerzeichen (oder mehrere, oder Tabs, oder Zeilenumbrüche) enthält, wird die Sache komplizierter und Fehleranfälliger. Also besser vermeiden, und km/h in die Vorlage packen, außer Du brauchst zwischendurch auch m/s oder mph.
| echo "es ist HIER km/h windig" > winddatei
windvar="6.1"
sed -i "s/HIER/$windvar/g" winddatei
|
Einmal doppelte Anführungszeichen ist bei Sed keine schlechte Idee, weil man oft Zeichen vor der Interpretation durch die Shell schützen muss. Der Standardtrenner ist "/" - den würde ich nicht durch "#" ersetzen, weil das schnell als Kommentar erkannt wird, wenn Du mit dem Maskieren durcheinander kommst.
Den Suchtext indirekt zu adressieren, da sehe ich keinen Vorteil drin. Unnötige Komplexität ist eine Fehlerquelle.
| sed -i "s#"$suchtext"#""$windvar""#g" datei
|
Wenn man sich Mühe gibt schafft man sicher auch 6 Anfürhungsstriche hintereinander zu setzen. Nur: Wozu?
Wenn man das -i weglässt, dann kann man leicht testen ob es klappt, weil das Ergebnis auf den Bildschirm geschrieben wird. Am Ende natürlich mit -i, um die Datei zu ändern.
Das Beispiel hier funktioniert auch ganz ohne Anführungsstrich:
| sed s/HIER/$windvar/g winddatei
es ist 6.1 km/h windig
|
Sed braucht die nicht. Aber wenn im Text ein Semikolon ist, (in HIER oder $windvar) dann kracht es schon.