Ich versuche, ein einzelnes Wort in einer bestimmten Zeile in einer Datei zu ändern, habe jedoch Probleme, alle miteinander zu verbinden.
Grundsätzlich befindet sich in einer Zeile meiner Datei das Schlüsselwort 'firmware_revision', und in dieser Zeile (und nur in dieser Zeile) möchte ich das Wort 'test' durch das Wort 'Produktion' ersetzen.
Also kann ich das machen:
grep 'firmware_revision' myfile.py | sed 's/test/production'
Dadurch wird die gewünschte Zeile ausgewählt und die Ersetzung durchgeführt, aber ich kann nicht herausfinden, wie diese neue Zeile in die Originaldatei übernommen wird, um die alte Zeile zu ersetzen. Ich kann es natürlich nicht einfach zurück in die Datei umleiten. Was soll ich also tun?
Selbst wenn ich Provisorien verwende, grep
verliere ich alle anderen Daten in der Datei, indem ich nur die benötigte Zeile erhalte, sodass ich nicht mehr nur eine temporäre Datei in eine temporäre Datei umleiten und dann das Original durch die temporäre Datei ersetzen kann.
Bearbeiten - Jemand hat nach weiteren Informationen gefragt
Nehmen wir an, ich habe eine Datei voller solcher Zeilen
[
('key_name1', str, 'value1', 'Description'),
('key_name2', str, 'value2', 'Description'),
('key_name3', str, 'value3', 'Description'),
('firmware_revision', str, 'my-firmware-name-test', 'Firmware revision name')
]
Jetzt möchte ich ein Skript (idealerweise ein Einzeiler) schreiben, das die Zeile mit 'firmware_revision' findet und alle Instanzen des Wortes 'test' in dieser Zeile in 'Produktion' ändert. Das Wort "Test" könnte sich an anderen Stellen in dieser Datei befinden, und ich möchte nicht, dass diese geändert werden. Um klar zu sein, möchte ich die obige Zeile in ändern
('firmware_revision', str, 'my-firmware-name-production', 'Firmware revision name')
Wie mache ich das?
sed -i.bak '/firmware_revision/ s/test/production/' myfile.py
sed
ist sehr leistungsfähig, kann beide Funktionen (grep
und Ersetzungen) ausführen, aber wir benötigen weitere Informationen darüber, wie die Zeile aussieht, um Ihnen zu helfen.