forma tosca:

$ cat xxx
Campo1A
Campo2A
Campo1B
Campo2B
Campo1C
Campo2C

$ tr '\n' '@' < xxx | sed -r 's/[EMAIL PROTECTED]([EMAIL 
PROTECTED])@.*\1@/&\n/g;y/@/\n/'
Campo1A
Campo2A

Campo1B
Campo2B

Campo1C
Campo2C

ou seja,
 - eu junto tudo numa linha (troco nova linha por arroba)
 - s/[EMAIL PROTECTED]([EMAIL PROTECTED])@.*\1@/&\n/g é, basicamente, uma ER 
que casa com todas
as linhas terminadas em uma determinada letra

[EMAIL PROTECTED]([EMAIL PROTECTED])@.*\1@

[EMAIL PROTECTED]  --> 0 ou mais caracteres não @
([EMAIL PROTECTED])  -> 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/[EMAIL PROTECTED]([EMAIL 
PROTECTED])@.*\1@/&\n/g;'
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@

Mais facil agora, eu imagino. Agora basta voltar ao normal com o comando y/@/\n/

2008/5/5 Guilherme Gall <[EMAIL PROTECTED]>:
>
>
>
>
>
>
> 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"

Responder a