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

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

Re: [shell-script] Re: duvidas a usar o SED


From: Salviano de Araujo Leão
Subject: Re: [shell-script] Re: duvidas a usar o SED
Date: Thu, 24 Apr 2008 07:59:25 -0300
User-agent: KMail/1.9.6 (enterprise 0.20070907.709405)

Em Wednesday 23 April 2008 15:29:51 miguelcm86 escreveu:

Olá Miguel


Você tem  algo assim

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

Tente o seguinte:

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

ele irá retorna somente o terceiro campo da váriavel cujo 
separador é o espaço. Neste caso a saída deverá ser:

 /media/cdrom0


Abraços

Salviano

> 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]