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

[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.



reply via email to

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