shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: duvidas a usar o SED


From: miguelcm86
Subject: Re: duvidas a usar o SED
Date: Wed, 23 Apr 2008 18:29:51 -0000
User-agent: eGroups-EW/0.82

Olá

Sim percebi perfeitramente, está a funcionar, escolhi a hipótese mais
fácil, ou melhor aquela que não tinha que alterar muita coisa:

this_new_version=$(sed -n "/Ubunta_"$version_ubuntu"=/{s///;p}" version)

foi só mudar de ' para ".

As hipóteses colocados pelo mod já tinha experimentado e não funcionam.

Mas afinal parece ser tão simples, foi só não perceber bem o conceito
do SED, e não saber que ele não assume as variáveis como tal.

Tiago mais uma vez obrigado :D

Mas já agora eu tendo uma expressão como faço para retirar só uma
parte dela...
tipo isto:
estou a tentar detectar onde está um CD inserido no sistema, estava a
pensar descobrir o caminho dele e testar se está lá os ficheiros do
Ubunta. 
Estou  a usar esta técnica para descobrir o caminho, que por acaso foi
você Tiago que me ensinou a fazer.
O problema é que só quero como output : "/media/cdrom0"


verify=$(mount | sed -n '/ iso9660 /{s/ type .*//;p}')

o output que está a dar é este:

/dev/scd0 on /media/cdrom0


portanto falta retirar o "/dev/scd0 on "


Se podesse dar mais uma explicação, agradecia.
Abraços


--- Em address@hidden, "Tiago Barcellos Peczenyj"
<tiago.peczenyj@...> escreveu
>
> Miguel.
> 
> O sed em si não suporta (o conceito de) variaveis como outras
> linguagens script (como awk e o proprio bash).
> 
> O que vc esta tentando fazer é criar um comando a partir de uma
> variavel de ambiente, e isso deve seguir algumas regras, veja só
> 
> Ao inves de
>             sed  '/Ubunta_"$version_ubuntu"=/{s///;p}'
> Faça
>             echo '/Ubunta_"$version_ubuntu"=/{s///;p}'
> 
> o resultado é
> 
> /Ubunta_"$version_ubuntu"=/{s///;p}
> 
> ou seja, não é o que vc quer. Isso se deve ao fato do caracter '
> (aspas) ser um caracter muito forte, pois TUDO dentro de aspas perde o
> seu poder especial.
> 
> agora, usando aspas duplas
> 
> echo "/Ubunta_${version_ubuntu}=/{s///;p}"
> /Ubunta_666=/{s///;p}
> 
> (nesse caso eu fiz version_ubuntu=666 , hehe)
> 
> O caracter " é menos forte, pois ele permite que o $ possa invocar uma
> variavel de ambiente.
> 
> IMHO vc pode trabalhar sem o sed, assim:
> 
> $ grep $(lsb_release -rs) /caminho/do/version | cut -d= -f2
> 3.0
> $ grep "Ubunta_version" /caminho/do/version | cut -d= -f2
> 3.0
> 
> ou
> 
> echo "versao do ubuntu ... $(grep $(lsb_release -rs)
> /caminho/do/version | cut -d= -f2)"
> 
> Ok?
> 
> Abraços
> 
> T
> 
> 
> 
> 2008/4/22 miguelcm86 <miguelcm86@...>:
> >
> >
> >
> >
> >
> >
> > Olá pessoal
> >
> >  Édnei Rodrigues é só para referir que ainda não testei aquele
problema
> >  com o zenity, mas logo que tiver testado respondo à mensagem ;)
> >
> >  Entretanto apareceu outro com mais prioridade e é referente ao
comando
> >  SED.
> >
> >  O código é este:
> >
> >  cd ~/Desktop
> >  version_ubunta_new=$(sed -n '/Ubunta_version=/{s///;p}' version)
> >  version_ubuntu=$(lsb_release -rs)
> >  this_new_version=$(sed -n '/Ubunta_"$version_ubuntu"=/{s///;p}'
version)
> >  echo "$version_ubunta_new"
> >  echo "nova versão.. $this_new_version"
> >
> >  O ficheiro version:
> >
> >  Ubunta_version=3.0
> >  Ubunta_7.04=1.0
> >  Ubunta_7.10=3.0
> >  Ubunta_8.04=3.0
> >
> >  O primeiro SED funciona perfeitamente, ele dá 3.0 como output, mas o
> >  segundo já não está a dar.
> >  O que quero é que ele leia do ficheiro version e guarde em
> >  "this_new_version" o número referente à versão que possuo, dado pelo
> >  comando lsb_release -rs.
> >
> >  O facto de meter uma variável dentro do SED faz com que ele falhe. O
> >  output é vazio.
> >
> >  Obrigado
> >
> >  Abraços
> >
> >  
> 
> 
> 
> -- 
> Tiago B Peczenyj
> Linux User #405772
> 
> http://peczenyj.blogspot.com/
> "what does not kill us makes us stronger"
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]