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 <[EMAIL PROTECTED]>: > 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 <[EMAIL PROTECTED] <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]