J'essaie de changer un seul mot sur une ligne spécifique dans un fichier, mais j'ai du mal à me connecter tous ensemble.
Fondamentalement, sur une ligne de mon fichier, il y a un mot-clé 'firmware_revision', et sur cette ligne (et seulement cette ligne) je veux remplacer le mot 'test' par le mot 'production'.
Je peux donc faire ceci:
grep 'firmware_revision' myfile.py | sed 's/test/production'
Cela sélectionnera la ligne que je veux et effectuera la substitution, mais je ne peux pas comprendre comment obtenir cette nouvelle ligne dans le fichier d'origine pour remplacer l'ancienne ligne. Je ne peux évidemment pas simplement le rediriger vers le fichier, alors que dois-je faire?
Même si j'utilise grep
des fichiers temporaires, en utilisant pour obtenir uniquement la ligne dont j'ai besoin, je perds toutes les autres données du fichier, donc je ne peux plus simplement tout rediriger vers un fichier temporaire, puis remplacer l'original par le temp.
Modifier - Quelqu'un a demandé plus d'informations
Disons que j'ai un fichier plein de lignes comme ça
[
('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')
]
maintenant, je veux écrire un script (idéalement une ligne) qui trouvera la ligne qui contient «firmware_revision» et change toutes les instances du mot «test» sur cette ligne en «production». Le mot «test» pourrait se trouver à d'autres endroits de ce fichier et je ne veux pas qu'ils soient modifiés. Donc, pour être clair, je veux changer la ligne ci-dessus en
('firmware_revision', str, 'my-firmware-name-production', 'Firmware revision name')
Comment puis-je faire cela?
sed -i.bak '/firmware_revision/ s/test/production/' myfile.py
sed
est très puissant, il peut effectuer les deux fonctions (grep
et la substitution) mais nous aurons besoin de plus d'informations sur l'apparence de la ligne pour vous aider.