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