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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Excluir caracteres (condicional)


From: Christian
Subject: Re: [shell-script] Excluir caracteres (condicional)
Date: Fri, 18 Jul 2008 15:55:42 -0300

Senhores, desculpem a demora, mas gostaria de dizer que com o sed ficou
perfeito. Utilizei  dica do Thiago, adaptei para o restante e funcionou de
primeira ! ! !

Obrigado,

Christian

2008/6/19 Tiago Barcellos Peczenyj <address@hidden>:

>   Eu apostaria em sed
>
> $ sed -r '/^"Serv/s/(([^,]+,){2}[^0]+)0/{\1}0/' arquivo
>
> a linha "Serviço" , "3333" , "049392827" se transforma em
>
> {"Serviço" , "3333" , "}049392827"
>
> ai vc pergunta: qual a vantagem: busca substituição.
>
> e expressão regular (([^,]+,){2}[^0]+)0 pode ser lida como
>
> ((EXPRESSAO){2}[^0]+)0
>
> ou seja, eu tenho uma expressão que se repete 2 vezes, seguida de um
> ou mais caracteres diferentes de 0 e, finalmente, um 0
>
> a expressão é essa:
>
> [^,]+,
>
> que signfica: um ou mais caracteres diferentes de virgula, seguido de
> uma virgula. com isso eu pego:
>
> "Serviço" , "3333" ,
>
> eu adiciono mais uma expressão pra chegar perto do 0 e ai... creu.
>
> Veja só:
> $ sed -r '/^"Serv/s/(([^,]+,){2}[^0]+)0/|&|/' arquivo
> |"Serviço" , "3333" , "0|49392827"
>
> se eu substitui tudo entre | e | pelo que esta entre {}
>
> $ sed -r '/^"Serv/s/(([^,]+,){2}[^0]+)0/{\1}0/' arquivo
>
> {"Serviço" , "3333" , "}049392827"
>
> o 0 some. Puff. desaparece!
>
> nesse caso, vc teria que fazer
>
> $ sed -r '/^"Serv/s/(([^,]+,){2}[^0]+)0/\1/' arquivo
>
> agora, para a outra linha, bastaria vc efetuar o mesmo raciocinio: uma
> expressão que pega tudo o que vc quer, com um grupo que pega o que
> deve aparecer ;-)
>
> 2008/6/18 Christian <address@hidden <chcoutinho%40gmail.com>>:
>
> > Sebnhores, boa noite. Estou com o seguinte problema:
> >
> > Tenho um arquivo com várias linhas, entre elas, tenho duas linhas
> especiais,
> > que iniciam com a palavra "Serviço" ou "Particular". Exemplo:
> >
> > "Serviço" , "3333" , "049392827" ........
> > "Particular" , "1254" , "7021098765" ........
> >
> > O que eu preciso fazer:
> >
> > Se a linha começar com a palavra Serviço, excluir o número zero do
> terceiro
> > campo;
> > Se a linha começar com a palavra Particular, excluir o número 70 do
> terceiro
> > campo;
> > Caso contrário, ler a próxima linha, até o final do arquivo.
> >
> > Porque preciso disso: Existe um software que lê esse terceiro campo e se
> > tiver com zero ou setenta, não funciona da forma esperada.
> >
> > Detalhe: na linha serviço sempre será o zero, e na linha particular
> sempre
> > será 70.
> >
> > O que seria mais fácil, usar sed ou awk ? ? ? ? Irei precisar de um
> > for/while para que ele faça isso no arquivo inteiro ?
> >
> > Desde já agradeço a colaboração de todos.
> >
> > Um braço,
> >
> > Christian
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
>
> --
> Tiago B Peczenyj
> Linux User #405772
>
> http://peczenyj.blogspot.com/
> "what does not kill us makes us stronger"
>
> 
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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