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

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

Re: [shell-script] Juntar linhas que tenham ^M (no AIX)


From: Fabiano Caixeta Duarte
Subject: Re: [shell-script] Juntar linhas que tenham ^M (no AIX)
Date: Thu, 5 Feb 2009 11:57:05 -0200

2009/2/5 Roberto Alves <address@hidden>

> [OFF]
> Opa, Julio, eu havia escrito no final um "PS" falando exatamente que
> eu não te liguei mais pra falar de show porque saí da banda mas tirei
> com medo de alguém reclamar.
> Agora estou a procura.
> Se o Aurelio verde morasse por aqui já tinha um baterista pra se
> juntar a mim e procurarmos o restante da banda.
> Por enquanto to brincando de eletrônica novamente fazendo uns pedais
> de efeito e amps pra mim. Assim não fico longe da música e mantenho a
> cabeça funcionando e arejada.
> Podexá que quando eu voltar a tocar te aviso, com certeza!
> Antes disso vamos marcar um chopp, ok?
> [/OFF]
>
> Obrigado, Julio e Moacir,
> eu já havia testado com o tr também, esqueci de dizer.
> Eu procurei a dica no livro maravilhoso que tenho aqui autografado.
>
> Julio, o " -i.veio ...." não funciona e você disse que caso não tiver
> a opção -i pra testar
> sed -i.veio 's/\015//' arquivo > arquivo.novo
>
> eu tirei o -i.veio e não acontece nada.
>
> Moacir, sua dica funciona mas eu não to conseguindo manter as outras
> linhas que não tem o ^M, ou seja, ele junta todo o arquivo em uma
> linha só.
> O tr não procura a sequência (já sem tremas) do carriage return + new line.
>
> Se eu faço:
> tr -s '\n' ' ' < teste > teste2 ; vi teste2
> ele junta todas as linhas em uma só.
>
> Se eu faço:
> tr -s '\r' ' ' < teste > teste2 ; vi teste2
> ele apenas remove os ^M.
>
> E se eu faço:
> tr -s '\r\n' ' ' < teste > teste2 ; vi teste2
> Apenas os ^M sumem, também.
>
> As linhas que eu queria que se juntassem (as que contêm o ^M seguidos
> de \n) não se juntam.
> Não sei se expliquei bem....
>
> No AIX é tão complicado...putz....
>
> Obrigado, Moacir e Julio,
> abraços a todos.
>
> Roberto
>
>
> 2009/2/5 Julio C. Neves <address@hidden>:
> > Fala Roberto,
> > como vão as coisa? Tocando muito? Vamos montar uma banda Shell? ;)
> >
> > Se vc simplesmente quiser excluir os CTRL+M (carriage return (CR) ou
> octal
> > \015) faça assim:
> >
> > sed -i.veio 's/\015//' arquivo
> >
> > O arquivo será alterado nele mesmo, porém antes, o véio será copiado para
> > arquivo.veio de forma a que vc possa voltar.
> >
> > Ops! Acabei de me lembrar que vc usa AIX e acho que o sed dele não tem a
> > opção -i. Caso não tenha, faça assim:
> >
> > sed -i.veio 's/\015//' arquivo > arquivo.novo
> >
> > e se arquivo.novo estiver do jeito que vc quer faça:
> >
> > mv -f arquivo.novo arquivo
> >
> > Isso (o CTRL+M) normalmente é provocado por um ftp (ou algo do gênero)
> > transferindo um arquivo de uma máquina rwin (aqui fim de linha é LF, lá é
> > CR+LF para ter certeza que vai funcionar ;).
> >
> > Se for este o caso, use no ftp a opção ascii, que a conversão é
> automática.
> >
> > Qdo for tocar me avise. Eu e minha metade-cara ;) adoramos o show e o
> jantar
> > daquela noite.
> > --
> > Abração,
> > Julio
> > *Cursos de Shell e Zenity nos finais de semana:
> > - Em SP ligue (11) 2125-4747;
> > - Em DF ligue (61) 3223-3000;
> > - No RJ brevemente;
> > - Turmas fechadas em outras cidades ligue (21) 8112-9988
> > *
> > 2009/2/5 Roberto Alves <address@hidden>
> >
> >> Senhores,
> >> creio que já tenham respondido isso zilhões de vezes mas eu estou
> >> tentando no AIX.
> >> Me pareceu que ia ser algo bem simples de se fazer mas não consegui.
> >>
> >> Eu recebo um arquivo que poucas são as vezes que algumas linhas vêm
> >> com aqueles caracteres de controle de carro (^M).
> >> Eu consigo, na mão, trocar tudo e juntar as linhas, no vi.
> >> Basta eu trocar ( 's/^M\n//g' ) os caracteres seguidos de uma nova
> >> linha por nada.
> >>
> >> Como eu posso automatizar isso?
> >> Vale lembrar que para procurar o ^M eu digito contro+v+m.
> >>
> >> Tentei, no linux, e isso funcionou mas quando passei pro AIX não.
> >>
> >> sed -e :a -e N -e 's/\^M\n//' -e ta arquivo > novoarquivo
> >>
> >> Olhando o help do sed no AIX ele me mostrou isso:
> >>
> >> A sample sed script file:
> >> :join
> >>
> >> /\\$/{N
> >>
> >> s/\\\n//
> >>
> >> b join
> >>
> >> }
> >>
> >> Daí resolvi tentar mas não consegui:
> >>
> >> sed
> >> :join
> >> /^M$/{N
> >> s/^M\n//
> >> join
> >> }
> >> arquivo > arquivonovo
> >>
> >> Se alguém puder dar uma sugestão eu agradeço.
> >>
> >> abraços,
> >> Roberto
> >>
> >>
> >
> > [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
>
>
>
Veja se isto ajuda:

sed ':z;/\r/{N;s/\r\n//;tz}' arquivo

Basicamente o que está acontecendo aí é um loop com o seguinte algoritmo

rótulo z
Se a linha possui \r então faça
   concatene com a próxima linha
   substitua a ocorréncia de \r\n por nada
   se substituição_ok então
      vá para z
   fim_se
fim_Se

Clareou?

-- 
Fabiano Caixeta Duarte
Especialista em Redes de Computadores
Linux User #195299
Ribeirão Preto - SP


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



reply via email to

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