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

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

Re: [shell-script] Re: formatacao de um arquivo


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Re: formatacao de um arquivo
Date: Thu, 6 Jul 2006 17:00:59 -0300

o comando
sed 's/\([0-9]\{1,4\}\)0\(.*C.*\)/\13\2/' 219060.txt

equivale à

sed 's/padrão_a_encontrar/valor_a_substituir' arquivo

ou seja, toda a ocorrencia do padrão_a_encontrar é substituido pelo outro valor

A expressão : \([0-9]\{1,4\}\)0\(.*C.*\)

significa o seguinte:
\(padrão1\)0\(padrão2\)

vc tem 1 GRUPO, o caracter 0 e outro GRUPO. o grupo é uma entidade de
expressões regulares que 'junta' expressões para usar - nesse caso -
retrovisores. apenas isso.

[0-9]\{1,4\} é um conjunto de numeros entre 1 e 4 digitos - no seu
caso eu acho que deveria ser apenas [0-9]{3}

.*C.* - casa com qq coisa que tenha um C no meio

logo:
sed 's/\([0-9]\{1,4\}\)0\(.*C.*\)/\13\2/' 219060.txt

vai casar com qq coisa q tenha 3 números quaisquer, um 0 na quarta
posição e um monte de coisa q tenha um C

agora vem a substituição. pro \1 vc substitui o primeiro grupo
encontrado, o \2 substitui o segundo. assim \13\2 significa -
literalmente - substituir o primeiro grupo, por um 3 e depois colocar
o resto da string

também funcionaria assim:

sed 's/\([0-9]\{3\}\)0\([0-9]+C\)/\13\2/'

se vc só quer trocar o quarto numero de 0 por 3 independente do que
segue - podes fazer assim:

sed 's/\([0-9]\{3\}\)0/\13/'

para ficar mais 'logico':

$ echo '14505230938800941627220060730004910000000024810000000150008512C'
| sed 's/\([0-9]\{3\}\)0/\1_3_/'
145_3_5230938800941627220060730004910000000024810000000150008512C

[]'s
On 7/6/06, Rafael Sanches <address@hidden> wrote:
Galera eu tinha feito algumas alteracoes mais mesmo assim nao funcionou, abaixo 
parte do codigo de um arquivo que preciso fazer uma coisa mt facil
seria mudar o 4º digito para 3 ou seja muda de 0 para 3.

14505230938800941627220060730004910000000024810000000150008512C
14505248938814460158920060730004920000000031280000000150008512C
14505234611810038825120060730004930000000032430000000150008512C
14505724472800072098020060730004940000000035680000000150008512C
14505731002800962258120060730004950000000025650000000600008512C
14505729837814945544020060730004960000000037640000000150008512C
14505732259800630209820060730004970000000031970000000150008512C

abaixo a exucao que fiz, sinceramente nao sou nenhum expert, e nao intendi tao 
bem tdos proxedimentos

aladin:/var/www# sed 's/\([0-9]\{1,4\}\)0\(.*C.*\)/\13\2/' 219060.txt

aceitaria qualquer tipo de ajuda

  ----- Original Message -----
  From: Reinaldo Marques de Lima
  To: address@hidden
  Sent: Tuesday, June 06, 2006 11:24 AM
  Subject: [shell-script] Re: formatacao de um arquivo


  Caramba, ta dificil aki hj...heheheh

  corrigindo:

  sed 's/\([0-9]\{1,4\}\)0\(.*C.*\)/\13\2/'

  Desculpem a lista pelos emails errados

  []'s


  --- Em address@hidden, "Éder Paulo Vendrasco"
  <edervendrasco@g...> escreveu
  >
  > Para não correr risco de modificar a 1a e a última linha, poderia fazer;
  >
  > sed '2,'$nl's/\([1-9]\{1,4\}\)0\(.*\)/\13\2/' arquivo.txt
  >
  > sendo $nl o número de linhas -1 do arquivo.txt, que poderia ser obtido
  > assim;
  >
  > nl=`echo $(wc -l teste.txt | awk '{print $1}')-1 | bc`
  >
  > Até,
  > Éder.
  >
  > On 6/6/06, Reinaldo Marques de Lima <reimlima@h...> wrote:
  > >
  > >
  > > Amigo Rafael...veja se isso te serve:
  > >
  > > sed 's/\([0-9]\{1,4\}\)0\(.*\)/\13\2/'
  > >
  > >
  > >
  > > --- Em address@hidden, "Rafael Sanches" <rafael@c...>
  > > escreveu
  > > >
  > > > Pessoal eis a minha primeira duvida,
  > > >
  > > > Todo mes eu recebo um arquivo da uma operadora regional que vem da
  > > seguinte maneira
  > > >
  > > > 02192199032200402031  (inicio do arquivo)
  > >
  > > > 14505244536800068946220040229000010000000021040000000150008512C
  > > (telefone1)
  > > > 14505776443800066463020040229000020000000027460000000150008512C
  > > (telefone2)
  > > > 14505234043800620557220040229000030000000000520000000150008512C
  > > (telefone3)
  > > > 14505241465800068627720040229000040000000026970000000150008512C
  > > (telefone4)
  > > > 9000379000000000976700  (final do arquivo)
  > > >
  > > > na verdade oq eu preciso é de substituir 4ª posicao de caracter que
  > > sempre é 0 pelo numero 3 , lembro aos colegas que ele tem que manter
  > > os cabeçados ou seja o inicio e final .
  > > >
  > > > No caso ficaria assim.....
  > > >
  > > > 14535244536800068946220040229000010000000021040000000150008512C
  > > (telefone1)
  > > > 14535776443800066463020040229000020000000027460000000150008512C
  > > (telefone2)
  > > >
  > > > Conto com a colaboração de todos os colegas.
  > > >
  > > >
  > > > Compubras Telecom
  > > > Suporte Técnico
  > > > Rafael Sanches
  > > > +55 (45) 35725000
  > > > Linux User #314543
  > > >
  > > > [As partes desta mensagem que não continham texto foram removidas]
  > > >
  > >
  > >
  > >
  > >
  > >
  > >
  > >
  >
  >
  > [As partes desta mensagem que não continham texto foram removidas]
  >







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



---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil


Links do Yahoo! Grupos










--
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer


reply via email to

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