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

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

Re: [shell-script] escapes e metacarateres no sed


From: jimmy
Subject: Re: [shell-script] escapes e metacarateres no sed
Date: Sun, 3 Jul 2011 17:54:44 -0300
User-agent: mutt-ng/devel-r804 (Linux)

On Sun, Jul 03, 2011 at 04:38:51PM -0000, flavio_galvao wrote:
> 
> 
> Caros amigos.
> Estou aprendendo sobre programação shell com o excelente livro do Júlio Cezar
> Neves.
> Estou com uma dúvida a respeito do uso da \ (contra-barra) no sed quando a 
> mesma
> vem entre apóstrofos.
> 
> no livro ele dá os seguintes exemplo para trocar data no formato dd/mm/aaaa 
> para
> o formato aaaa/mm/dd:
> 
> 1º exemplo (sem opção -r e utilizando a / (barra) como separador)
> 
> sed 's/^\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3\/\2\/\1' <<<
> 31/12/2009
> 
> 2º exemplo (com opção -r e utilizando a / (barra) como separador)
> 
> sed -r 's/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/\3\2\1' <<< 31/12/2009
> 
> 3º e último exemplo (com a opção -r e utilizando o - (hífen) como separador)
> 
> sed -r 's-^([0-9]{2})/([0-9]{2})/([0-9]{4})$-\3/\2/\1' <<< 31/12/2009
> 
> no primeiro exemplo os apóstrofos impedem a interpretação do seu conteúdo pelo
> shell, então os escapes feitos pelas \ (barras invertidas) não teriam efeito
> algum para o shell na cadeia já que eles não seriam resolvidos. E ainda por 
> cima
> não estamos utilizando a opção -r do sed que ativa os metacaracteres 
> avançados.
> Apesar de tudo isso a linha de comandos citada gera o resultado desejado (a
> mudança de formato).
Esses escapes são do próprio sed e  sim, os apóstrofos são para inibir a
interpretação de metacaracteres  nesses scripts inline para  que a linha
de comando  chegue exatamente  como precisa  para ser  compreendida pelo
interpretador, que  neste caso, é  o sed,  mas poderia ser  awk, expect,
perl, outro(s) shell(s).

> 
> Alguém saberia o porque desse comportamento?
> Será que o próprio sed resolve os escapes e devolve a linha para o shell que 
> faz
> a interpretação dos metacaracteres e passa a nova linha para o sed? ou eu 
> viajei
> na maionese?
Você apenas inverteu o fluxo na  interpretação. A linha de comando entre
apóstrofos é para o sed interpretar sem a intervenção do shell.

Há  casos, principalmente  com  aspas, onde  é  necessário escapar  tudo
aquilo que o shell interpreta como metacaractere, inibindo, por exemplo,
expansão de parâmetros, de processos, interpolação de variáveis.

> 
> espero que eu tenha conseguido expressar bem a minha dúvida.
> desculpem pelo tamanho do post...
> 


-- 
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------


reply via email to

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