Arquivo

Posts Tagged ‘script’

Shell Script: Extrair trechos de uma linha


Acompanhando meus feeds, vi um post interessante do InFog com o título de Expressões Regulares:  Casar texto entre chaves .  Nesse post, ele demonstra como obter um texto que se encontra entre chaves em uma linha usando a linguagem Python e PHP.  Essa era uma coisa que eu estava procurando em meu aprendizado com Shell Script e resolvi tentar achar uma solução nessa linguagem.  Depois de umas tentativas sem sucesso, obtive ajuda de colegas da lista shell-script no Yahoo! Grupos.

Eis então duas abordagens interessantes:

Primeira: Obter os textos juntamente com as chaves.

Essa solução é a mais simples. Vou usar o mesmo texto que foi usado no post dele no script abaixo:

#!/bin/bash

texto="ola, {sou} uma string com {varios} caracteres {especiais}"

grep -o '[{][^}]*[}]' <<< "$texto"

Se executar esse script, a saída será:

{sou}
{varios}
{especiais}

Interessante! Mas eu ainda queria algo que também eliminasse as chaves e ficasse somente o texto dentro delas, cada um em uma linha. O sed é ótimo pra isso.

Segunda: Obter os textos sem as chaves na saída

#!/bin/bash

texto="ola, {sou} uma string com {varios} caracteres {especiais}"

sed '
        s/^[^{]*[{]//;
        s/[}][^{]*[{]/\n/g;
        s/[}].*$//
' <<< "$texto"

O primeiro comando do sed apaga do início da linha até a primeira chave. O segundo, substitui todo o conteúdo entre as chaves por um caractere de nova linha (\n) e o terceiro apaga desde a última chave até a final da linha.

E se executarmos o script…

sou
varios
especiais

Exatamente como eu queria!

Anúncios
Categorias:Linux, Shell Script Tags:, , ,