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

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


reply via email to

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