Estou tentando alterar uma única palavra em uma linha específica de um arquivo, mas estou tendo problemas para conectar todos juntos.
Basicamente, em uma linha do meu arquivo existe a palavra-chave 'firmware_revision' e nesta linha (e somente nesta linha) quero substituir a palavra 'teste' pela palavra 'produção'.
Então eu posso fazer isso:
grep 'firmware_revision' myfile.py | sed 's/test/production'
Isso selecionará a linha que eu quero e executarei a substituição, mas não consigo descobrir como colocar essa nova linha no arquivo original para substituir a linha antiga. Obviamente, não posso apenas redirecioná-lo de volta para o arquivo, então o que devo fazer?
Mesmo se eu usar temporários, usando grep
para obter apenas a linha necessária, perco todos os outros dados no arquivo, para que eu não possa mais apenas redirecioná-los para um arquivo temporário e substituir o original pela temp.
Editar - Alguém pediu mais informações
Digamos que eu tenho um arquivo cheio de linhas como esta
[
('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')
]
Agora, quero escrever um script (de preferência uma linha) que encontre a linha que contém 'firmware_revision' e altere todas as instâncias da palavra 'test' nessa linha para 'produção'. A palavra 'teste' pode estar em outros lugares nesse arquivo e eu não quero que elas sejam alteradas. Portanto, para deixar claro, quero alterar a linha acima para
('firmware_revision', str, 'my-firmware-name-production', 'Firmware revision name')
Como eu faço isso?
sed -i.bak '/firmware_revision/ s/test/production/' myfile.py
sed
é muito poderoso, ele pode executar ambas as funções (grep
e substituição), mas precisaremos de mais informações sobre a aparência da linha para ajudá-lo.