Re: Ajudinha com o sed usando $variaveis

2009-06-09 Por tôpico Junior Polegato - Linux

hamacker escreveu:

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 ?

[]'s


  


Olá,

  Você vai precisar de uma função auxiliar para fazer isso ou 
digitar antes de cada barra normal uma invertida. Segue duas idéias:


function sed_ready { echo "$1" | sed 's/\//\\\//g'; }
$search_for="`sed_ready "# deb http://archive.canonical.com/ubuntu 
jaunty partner"`"
$replace_to="`sed_ready "deb http://archive.canonical.com/ubuntu jaunty 
partner"`"

sed -i "s/$search_for/$replace_to/" /etc/apt/sources.list

Ou ainda:

function sed_ready { echo "$1" | sed 's/\//\\\//g'; }
$repository="`sed_ready "http://archive.canonical.com/ubuntu jaunty 
partner"`"

sed -i "s/# deb $repository/deb $repository/" /etc/apt/sources.list


[]'s
Junior Polegato


--
To UNSUBSCRIBE, email to debian-user-portuguese-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: Ajudinha com o sed usando $variaveis

2009-06-09 Por tôpico hamacker
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 :
> 2009/6/8 hamacker 
>>
>> 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 debian-user-portuguese-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: Ajudinha com o sed usando $variaveis

2009-06-08 Por tôpico João Olavo Baião de Vasconcelos
2009/6/8 hamacker 

> 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


Re: Ajudinha com o sed usando $variaveis

2009-06-08 Por tôpico Fabricio Cannini
On Monday 08 June 2009 19:13:47 Ataliba Neto wrote:
> Pelo que entendi, ele não funciona pq não possui as \
> E quando se recebe uma variável que possui / o sed não funfa.
>
> Então tem que dá um jeito de trocar as / por \/ antes de executar o sed.
>
> Sempre ás Ordens,

Outra coisa.
AFAICS, as variáveis não estão funcionando porque estão dentro de aspas 
simples ( sed -i ' "$bla" "$bla" ...' ) ;)

[ ]'s


--
To UNSUBSCRIBE, email to debian-user-portuguese-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Re: Ajudinha com o sed usando $variaveis

2009-06-08 Por tôpico Ataliba Neto
Pelo que entendi, ele não funciona pq não possui as \
E quando se recebe uma variável que possui / o sed não funfa.

Então tem que dá um jeito de trocar as / por \/ antes de executar o sed.

Sempre ás Ordens,

-- 
Ataliba Neto.
"O que Deus faz nenhum software é capaz."

http://www.atalibaneto.com.br


Ajudinha com o sed usando $variaveis

2009-06-08 Por tôpico hamacker
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 ?

[]'s


--
To UNSUBSCRIBE, email to debian-user-portuguese-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org