Tente:
sed -i.bak '/firmware_revision/ s/test/production/' myfile.py
Aqui, /firmware_revision/
age como uma condição. Isso é verdadeiro para linhas que correspondem ao regex firmware_revision
e false para outras linhas. Se a condição for verdadeira, o comando que segue é executado. Nesse caso, esse comando é um comando substituto que substitui a primeira ocorrência de test
por production
.
Em outras palavras, o comando s/test/production/
é executado apenas nas linhas que correspondem ao regex firmware_revision
. Todas as outras linhas passam inalteradas.
Por padrão, o sed envia sua saída para o padrão. Você, no entanto, queria mudar o arquivo no lugar. Então, adicionamos a opção -i
. Em particular, -i.bak
faz com que o arquivo seja alterado no lugar com uma cópia de backup salva com uma extensão .bak
.
Se você decidiu que o comando funciona para você e quer viver perigosamente e não criar um backup, então, com o GNU sed (Linux), use:
sed -i '/firmware_revision/ s/test/production/' myfile.py
Por outro lado, no BSD (OSX), a opção -i
deve ter um argumento. Se você não quiser manter um backup, forneça um argumento vazio. Assim, use:
sed -i '' '/firmware_revision/ s/test/production/' myfile.py
Editar
Na edição da pergunta, o OP pede a ocorrência de todas test
na linha a ser substituída por production
. Nesse caso, adicionamos a opção g
ao comando substituto para uma substituição global (para essa linha):
sed -i.bak '/firmware_revision/ s/test/production/g' myfile.py