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