Você pode fazer:
sed "/^listen_addresses = \['127\.0\.0\.1:53', '\[::1\]:53'\]$/s/53/40/g" file
- Procura a string exata
listen_addresses = ['127.0.0.1:53', '[::1]:53']
- Se a string corresponder a
s/53/40/g
, todas as ocorrências de 53
serão substituídas por 40
(mas apenas na linha correspondente)
Exemplo de saída:
$ cat file
listen_addresses = ['127.0.0.1:53', '[::1]:53']
listen_addresses = ['127.0.0.2:53', '[::1]:53']
$ sed "/^listen_addresses = \['127\.0\.0\.1:53', '\[::1\]:53'\]$/s/53/40/g" file
listen_addresses = ['127.0.0.1:40', '[::1]:40']
listen_addresses = ['127.0.0.2:53', '[::1]:53']
Como você pode ver, uma correspondência exata é necessária para realizar a substituição.