Em 26/5/2010 17:16, cleberson escreveu:
> Boa tarde!
>
> Gostaria de uma ajuda para solucionar este desafio(pra min..rs).
> Desejo capturar um intervalo de linhas separadas por chaves.
>
> ex:
>
> #arquivo teste
> primeira_linha
> teste{
>    linha1
>    linha2
>    linha3
> }
> ultima_linha
>
> Gostaria de saber qual comando posso utilizar para que seja
 > possivel jogar o que esta entre chaves para alguma variavel:
>
> linha1
> linha2
> linha3
>
> desde já agradeço atenção!
>
> att,
> Cleberson.
>

Ve se assim complica:

$ cat temp.txt
#arquivo teste
primeira_linha
teste{
   linha1
   linha2
   linha3
}
ultima_linha

$ sed -n '/^teste{$/{N;s/^.*\n//;:a;N;/\n}$/!{ba};s/\n}$//;p}' temp.txt
   linha1
   linha2
   linha3
$

Por via das duvidas vou tentar explicar:

/^teste{$/       # Se encontrar a linha 'teste{'
{
   N;             # Junte com a linha seguinte
   s/^.*\n//;     # Retire a primeira linha (a linha 'teste{')
   :a;            # Inicio do laco
     N;           # Junte com a linha seguinte
     /\n}$/!{ba}; # Enquanto nao encontrar a linha '}'
   s/\n}$//;      # Entao remova a ultima linha (a linha '}')
   p              # E exiba o resultado
}

A opcao -n do sed desliga a impressao automatica, so imprimindo ao 
encontrar o comando 'p'.

Marcio Gil.

Responder a