Como você está usando o Linux, você terá a versão GNU do sed (que possui uma opção -i
para edição de arquivos 'in-loco'):
sed -i '/deb http:\/\/ftp.us.debian.org\/debian\/wheezy main/s/$/ contrib non-free/' file.sh
No comando sed, o material entre os dois primeiros //
informa ao sed para procurar por uma linha contendo isso - então sed '/foo/'
procuraria por linhas contendo 'foo'. Como sua linha contém barras avançadas, elas precisam ser escapadas. o s/$/ contrib non-free
informa sed para substituir o final da linha (representado pelo cifrão) por 'contrib non-free'. A forma geral é s/replace this/with this/
. Juntos, isso procura as linhas desejadas e, em seguida, coloca o texto no final.
Se você quiser apenas alterar o final de todas as linhas no arquivo:
sed -i 's/$/ contrib non-free/'
Usar o editor de texto padrão, ed, é muito ligeiramente mais portátil, mas em geral você vai usar sed para essas tarefas com mais freqüência (ou, de preferência, um editor de texto decente como vim).
printf '%s\n' 'g/deb http:\/\/ftp.us.debian.org\/debian\/wheezy main/s/$/ contrib non-free/' w q | ed file.sh