[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Formatando saída de filtragem do grep
From: |
Tiago Barcellos Peczenyj |
Subject: |
Re: [shell-script] Formatando saída de filtragem do grep |
Date: |
Mon, 5 May 2008 17:07:01 -0300 |
forma tosca:
$ cat xxx
Campo1A
Campo2A
Campo1B
Campo2B
Campo1C
Campo2C
$ tr '\n' '@' < xxx | sed -r 's/[^@]*([^@])@.*\1@/&\n/g;y/@/\n/'
Campo1A
Campo2A
Campo1B
Campo2B
Campo1C
Campo2C
ou seja,
- eu junto tudo numa linha (troco nova linha por arroba)
- s/[^@]*([^@])@.*\1@/&\n/g é, basicamente, uma ER que casa com todas
as linhas terminadas em uma determinada letra
[^@]*([^@])@.*\1@
[^@]* --> 0 ou mais caracteres não @
([^@]) -> 1 caracter não @ (agrupado!!!) X
@.* -> @ seguido de qq quantidade de caracteres
\1@ -> o mesmo caracter do grupo (X) seguido de @
complicado?
$ tr '\n' '@' < xxx | sed -r 's/[^@]*([^@])@.*\1@/&\n/g;'
Campo1A@Campo2A@
Campo1B@Campo2B@
Campo1C@Campo2C@
Mais facil agora, eu imagino. Agora basta voltar ao normal com o comando y/@/\n/
2008/5/5 Guilherme Gall <address@hidden>:
>
>
>
>
>
>
> Prezados(as),
>
> Tenho um arquivo no seguinte formato:
>
> Campo1A = "valor"
> Campo2A = "valor"
> Campo3A = "valor"
> [...]
> CampoNA = "valor"
>
> Campo1B = "valor"
> Campo2B = "valor"
> Campo3B = "valor"
> [...]
> CampoNB = "valor"
>
> Campo1C = "valor"
> Campo2C = "valor"
> Campo3C = "valor"
> [...]
> CampoNC = "valor"
>
> [...]
>
> Como a lista é muito extensa para cada grupo (como grupo refiro-me ao
> conjunto de campos separados por linhas em branco), uso o grep para
> filtrar apenas os campos que desejo ver em cada momento. Assim, se
> quero ver apenas os campos 1 e 2 de cada grupo, a saída na tela é:
>
> Campo1A
> Campo2A
> Campo1B
> Campo2B
> Campo1C
> Campo2C
>
> Gostaria que a "cara" da saída fosse parecida com a do arquivo
> completo, ou seja, com uma linha em branco entre cada grupo de campos.
> Seria assim:
>
> Campo1A
> Campo2A
>
> Campo1B
> Campo2B
>
> Campo1C
> Campo2C
>
> Alguém tem alguma idéia de como fazer isso? Pensei em separar os
> grupos em arquivos distintos, depois aplicar o grep a cada arquivo e
> imprimir uma linha em branco após cada saída do grep dentro de uma
> iteração, mas acredito que exista uma forma mais simples de se fazer
> isso.
>
> Obrigado,
>
> Guilherme M. Gall
>
--
Tiago B Peczenyj
Linux User #405772
http://peczenyj.blogspot.com/
"what does not kill us makes us stronger"