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: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Excluir caracteres (condicional)
Date: Thu, 19 Jun 2008 09:57:35 -0300

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


reply via email to

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