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: Thu, 24 Apr 2008 18:00:28 -0000
User-agent: eGroups-EW/0.82

Olá

Salviano Leão, sim a sua opcção funcionou, perfeitamente, agora começo
a perceber a utilidade do cut.

Édnei Rodrigues o que queria mesmo era que o output fosse:
/media/cdrom0
e não:
/dev/scd0
como a seu exemplo fez.

Obrigado a todos os que ajudaram ;)


--- Em address@hidden, "Édnei Rodrigues"
<ednei.felipe.rodrigues@...> escreveu
>
> essa é fácil:
> [ednei@localhost ~]$ opcao="/dev/scd0 on"
> [ednei@localhost ~]$ echo $opcao | sed 's/ .*$//'
> /dev/scd0
> 
> 
> pronto, cortado o "on"
> 
> 
> Em 24/04/08, Salviano de Araujo Leão <salvianoleao@...> escreveu:
> >
> >   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<shell-script%40yahoogrupos.com.br>,
> > "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"
> >
> >  
> >
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




reply via email to

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