[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [shell-script] pegar um trecho
From: |
Marcio Gil |
Subject: |
RE: [shell-script] pegar um trecho |
Date: |
Tue, 1 Dec 2009 14:50:30 -0200 |
Amigo Jeferson, a linha que sugerimos funciona bem com "Model=" se
este estiver no início da linha, mas não se tiver no meio, como o
campo "Serial=", veja:
$ linha="Model=Samsung 0411N,
Serial=00000005464,blablabla=asdadqddq"
$ echo $linha | sed -n 's/Model=\([^,]*\).*$/\1/p'
Samsung 0411N
$ echo $linha | sed -n 's/Serial=\([^,]*\).*$/\1/p'
Model=Samsung 0411N, 00000005464
$ echo $linha | sed -n 's/^.*Serial=\([^,]*\).*$/\1/p'
00000005464
Então o comando a ser sugerido é este:
echo $linha | sed -n 's/^.*Model=\([^,]*\).*$/\1/p'
ou
sed -n 's/^.*Model=\([^,]*\).*$/\1/p' Arquivo
Abraço,
Marcio Gil.
> -----Original Message-----
> From: Marcio Gil
>
> > -----Original Message-----
> > From: Julio C. Neves
> >
> > 2009/12/1 Marcio Gil <address@hidden>
> > >
> > > $ linha="Model=Samsung 0411N, Serial=00000005464,
> > > blablabla=asdadqddq"
> > > $ echo $linha | sed 's/Model=\([^,]*\).*$/\1/'
> > > Samsung 0411N
> > > $
> > >
> > > O "sed" acima substitui a linha pelo que está após "Model="
> > > e que não contenha ",". Cuidado apenas com as linhas que
> > > não contem "Model=", pois neste caso o "sed" retornaria a
> > > linha inteira.
> > >
> > Marcio, a sua sacada foi excelente, mas esta última limitação
> > que vc colocou, pode ser contornada se fizermos:
> >
> > $ sed '/Model=/s/Model=\([^,]*\).*$/\1/' Arquivo
> >
>
> Desculpe Julio, mas não funciona:
>
> $ linha="Model=Samsung 0411N,
> Serial=00000005464,blablabla=asdadqddq"
> $ echo $linha | sed '/Model=/s/Model=\([^,]*\).*$/\1/'
> Samsung 0411N
> $ echo linha | sed '/Model=/s/Model=\([^,]*\).*$/\1/'
> linha
> $
>
> Imprimiu a linha inteira mesmo quando não havia "Model=".
>
> No entanto funciona desta maneira:
>
> $ echo $linha | sed -n '/Model=/s/Model=\([^,]*\).*$/\1/p'
> Samsung 0411N
> $ echo linha | sed -n '/Model=/s/Model=\([^,]*\).*$/\1/p'
> $
>
> Mas desta forma nem precisa repetir o padrão:
>
> $ echo $linha | sed -n 's/Model=\([^,]*\).*$/\1/p'
> Samsung 0411N
> $ echo linha | sed -n 's/Model=\([^,]*\).*$/\1/p'
> $
>
> O "-n" suprime a impressão automatica, então o comando "p"
> imprime apenas se houver "Model=".
>
> Abraço.
>
> Marcio Gil.
>