In Linux C Shell muss ich eine Zeile in einer Datei durch eine Variable ersetzen, die eine Reihe von Zahlen und eine Zeichenfolge enthält. Ich verwende eine Kombination aus printf, xargs und sed, um die Formatierung beizubehalten, wie von this answer vorgeschlagen. Dies ist mein Code bis jetzt (ich nicht einen einfacheren Ansatz in csh finden konnte):xargs behält keine führenden Leerzeichen im Format
> echo " 2 2 2 2 2 2 2 2 Number of gradient directions" > myfile.txt
> set ndir = `repeat 8 printf ' 2'`
> set ndir[1] = 16
> set afmt1 = `repeat 8 printf '%%3d'`
> set afmt = "$afmt1%s"
> printf "$afmt" $ndir " Number of gradient directions" | xargs -I '{}' sed -i '/Number of gradient directions/c\{}' myfile.txt
Das Ergebnis ist:
> cat myfile.txt
16 2 2 2 2 2 2 2 Number of gradient directions
Aber ich brauche:
> cat myfile.txt
16 2 2 2 2 2 2 2 Number of gradient directions
Das einzige Problem ist, dass die Zeile das% 3d-Format nur für den ersten Index der Variablen $ ndir verliert. Ich muss dieses Format für die gesamte Zeile beibehalten. Gibt es einen subtileren Weg oder eine Lösung für diesen Weg?
Sie sind erstaunlich, danke. Ich habe den Titel meiner Frage geändert, damit andere ihre relevante Frage leichter finden können. –
@ S.M: Ich danke Ihnen für die Aktualisierung des Fragetitels. – mklement0