Hamacker, alguns comentarios:
1) Vc está cercando o comando sed com aspas simples. Dessa maneira, o bash não enxergará as variáveis que estão lá dentro. Eh o mesmo caso de vc fazer: echo 'Eu tenho $qtd anos'. A variavel $qtd não será identificada e não será substituida por seu valor. Portanto, vc deverá usar aspas duplas
2) Como ao redor já vai estar aspas duplas (vide 1), não da para utilizar aspas duplas ao redor das variaveis tb -- mt menos aspas simples. Eu entendo que vc usou por causa dos espaços nas strings, mas nesse caso não tem problema, pode deixar de usá-las que vai funcionar.
3) No meio das strings search_for e replace_for tem o caracter "/". Isso tb irá atrapalhar, pois eh o mesmo caracter que separa os campos do comando sed. É só vc trocar os "/" que estão no sed por um outro caracter que não esteja em nenhuma das strings. Por exemplo, o pipe "|".
Ficaria assim então:
sed "s|$search_for|$replace_to|g" /etc/apt/sources.list
Testei aqui e deu certo:
[~]: search_for="# deb http://archive.canonical.com/ubuntu jaunty partner"
[~]: replace_to="deb http://archive.canonical.com/ubuntu jaunty partner"
[~]: sed "s|$search_for|$replace_to|g" /etc/apt/sources.list | grep partner
## 'partner' repository.
deb
http://archive.canonical.com/ubuntu jaunty partner
# deb-src
http://archive.canonical.com/ubuntu jaunty partner
[~]: grep partner /etc/apt/sources.list
## 'partner' repository.
# deb
http://archive.canonical.com/ubuntu jaunty partner
# deb-src
http://archive.canonical.com/ubuntu jaunty partner