Olá, a todos, As aspas eram duplas e não funcionaram, daí foi trocado por simples. Agora com a sua explicação fiquei sabendo do uso da /, e provavelmente foi isso que deu errado, pois minha variavel tambem possuía /. Com a sua ajuda e a possibilidade de trocar o delimitador / por | (pipe) acho que não terei mais problemas. Se ainda tiver problemas, volto o contato.
Obrigado a todos. 2009/6/8 João Olavo Baião de Vasconcelos <[email protected]>: > 2009/6/8 hamacker <[email protected]> >> >> Olá pessoal, isso aqui não funciona : >> $search_for="# deb http://archive.canonical.com/ubuntu jaunty partner" >> $replace_to="deb http://archive.canonical.com/ubuntu jaunty partner" >> sed -i 's/"$search_for"/"$replace_to"/g' /etc/apt/sources.list >> >> Se eu trocar as variaveis por frases literais, aí funciona : >> sed -i 's/# deb http:\/\/archive.canonical.com\/ubuntu jaunty >> partner/deb http:\/\/archive.canonical.com\/ubuntu jaunty partner/g' >> /etc/apt/sources.list >> >> O exemplo acima é apenas um demonstrativo, mas o objetivo é tirar >> remarks de linhas especificas de arquivos textos usando o sed. >> Onde tá a zica ? porque não consigo embutir variaveis na instrução do sed >> ? > > 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 > > Só tirei o -i para não substitui no meu arquivo (nem tava como root, então > ia dar permissão negada). > E só pra lembrar que, nesse caso, o -g não é necessário. > > Retorne pra ver se era isso mesmo. > > Falous!! > -- > João Olavo Baião de Vasconcelos > Bacharel em Ciência da Computação > Analista de Sistemas - Infraestrutura > joaoolavo.wordpress.com > -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected]

