Anexar o texto no final de uma linha específica

0

Eu tenho um arquivo com várias linhas. O que estou tentando fazer é adicionar uma string no final de um comando.

Eu tenho um script que instala uma ferramenta automaticamente. Agora algumas coisas têm mudanças nas fontes. Eu preciso adicionar contrib non-free no final desta linha:

deb http://ftp.us.debian.org/debian/ wheezy main

Deve olhar para isto:

deb http://ftp.us.debian.org/debian/ wheezy main contrib non-free

Como posso conseguir isso?

    
por Palermo 17.11.2014 / 11:08

1 resposta

1

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
    
por 17.11.2014 / 11:26