Sto provando a cambiare una singola parola su una riga specifica in un file, ma ho qualche problema a collegarmi tutti insieme.
Fondamentalmente, su una riga del mio file c'è una parola chiave "firmware_revision", e su questa linea (e solo questa riga) voglio sostituire la parola "test" con la parola "produzione".
Quindi posso farlo:
grep 'firmware_revision' myfile.py | sed 's/test/production'
Questo sceglierà la riga che desidero ed eseguirà la sostituzione, ma non riesco a capire come ottenere questa nuova riga nel file originale per sostituire la vecchia riga. Ovviamente non posso semplicemente reindirizzarlo al file, quindi cosa dovrei fare?
Anche se uso i provvisori, usando grep
per ottenere solo la linea di cui ho bisogno, perdo tutti gli altri dati nel file, quindi non posso più reindirizzare tutto su un file temporaneo, quindi sostituire l'originale con il temp.
Modifica: qualcuno ha chiesto ulteriori informazioni
Diciamo che ho un file pieno di righe come questo
[
('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')
]
ora voglio scrivere uno script (idealmente un one-liner) che troverà la riga che contiene 'firmware_revision', e cambierà tutte le istanze della parola 'test' su quella linea in 'produzione'. La parola "test" potrebbe trovarsi in altri punti del file e non voglio che vengano modificati. Quindi, per essere chiari, voglio cambiare la riga sopra in
('firmware_revision', str, 'my-firmware-name-production', 'Firmware revision name')
Come faccio a fare questo?
sed -i.bak '/firmware_revision/ s/test/production/' myfile.py
sed
è molto potente, può svolgere entrambe le funzioni (grep
e la sostituzione) ma avremo bisogno di maggiori informazioni su come appare la linea per aiutarti.