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

