[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:10:51 -0200 |
> -----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.