[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Quebra de linha
From: |
slackmonio |
Subject: |
Re: Quebra de linha |
Date: |
Wed, 16 Dec 2009 12:46:24 -0000 |
User-agent: |
eGroups-EW/0.82 |
Uma alternativa seria juntar todas as linhas do arquivo no PATT do SED (se o
arquivo for pequeno) e depois usar uma expressão regular para modificar todo o
conjunto lido de acordo com um padrão desejado:
cat temp.txt
aaa
1-
bbb
2-
ccc
ddd
3-
eee
fff
O objetivo é deixar isso no PATT
aaa\n1-\nbbb\n2-\nccc\nddd\n3-\neee\nfff
e trocar xxx\nnumero- por numero-xxx:
$ sed ':a;$!{N;ba;}; s/\([^\n]*\)\n\([0-9][0-9]*-\)/\2\1/g'
--- Em address@hidden, "Marcio Gil" <marciomgil@...> escreveu
>
> Sempre existe uma maneira mais prática:
>
> $ cat temp.txt
> 123456
> 1-
> asdfghj
> 2-
> bnm,,.;
> dfghjkl
> 3-
> ertyuio
>
> Numeração pré-posta:
>
> $ sed -n '/^[0-9]-$/!{x;1!p};//{x;H;x;s/\n//;x};${g;p}' temp.txt
> 1-123456
> 2-asdfghj
> bnm,,.;
> 3-dfghjkl
> ertyuio
>
> Numeração pós-posta (é só tirar um x):
>
> $ sed -n '/^[0-9]-$/!{x;1!p};//{H;x;s/\n//;x};${g;p}' temp.txt
> 1234561-
> asdfghj2-
> bnm,,.;
> dfghjkl3-
> ertyuio
>
> Explicando:
>
> /^[0-9]-$/!{ # Se não for numeração:
> x # Troca a linha com o conteúdo espaço de troca;
> 1!p # Imprime se não for a primeira linha;
> }
> //{ # Se for numeração (repete a busca sem o "não"):
> x # Troca a linha com o conteúdo espaço de troca;
> H # Adiciona o espaço de trabalho ao de troca;
> x # Inverte novamente;
> s/\n// # Remove o nova linha;
> x # Inverte novamente, guardando o resultado;
> }
> ${ # No final (a última linha):
> g # Pega o espaço de troca;
> p # E o imprime.
> }
>
> Espero que seja útil.
>
> Márcio Gil.
>
> P.S: Pessoal, não sei se este meu estilo de ficar me respondendo
> várias vezes é incômodo para vocês, ou contra as regras.
> Acontece que eu fico com o negócio inculcado e depois tenho
> novas idéias :-), mas se for ruim eu posso me esforçar para
> não repetir isto.
>
> > -----Original Message-----
> > From: Marcio Gil
> >
> > Ops! Só funcionou porque o meu exemplo só tinha numerações nas
> > linhas pares :-D
> >
> > Ao excluir uma das linhas não funciona:
> >
> > $ cat temp.txt
> > 123456
> > 1-
> > asdfghj
> > 2-
> > bnm,,.;
> > dfghjkl
> > 3-
> > ertyuio
> > $ sed '/^[0-9]-$/!x;1d;$p;$x' temp.txt | sed 'N;s/-\n/-/'
> > 1-123456
> > 2-asdfghj
> > bnm,,.;
> > 3-
> > dfghjkl
> > ertyuio
> >
> > Agora assim funciona:
> >
> > $ sed '/^[0-9]-$/!x;1d;$p;$x' temp.txt | sed '/^[0-9]-/{N;s/\n//}'
> > 1-123456
> > 2-asdfghj
> > bnm,,.;
> > 3-dfghjkl
> > ertyuio
> >
> > O comando N junta a linha atual com a linha seguinte no espaço
> > de trabalho, mas mantém o caracter \n. Mas como o \n agora faz
> > parte da área de trabalho, podemos manipulá-lo. No entanto como
> > a linha seguinte já foi juntada com a atual, na próxima
> > iteração esta já não será tratada, mas a que vem depois.
> >
> > Explicando o segundo SED:
> >
> > /^[0-9]-/{ # Se a linha contem a numeração:
> > N # Junta com a seguinte;
> > s/\n// # E remove o \n intermediário
> > }
> >
> > Eduardo, não sei se eu me confundi e você realmente quer a
> > numeração pós-posta, no lugar de pré-posta.
> > Se for o caso agora fica fácil corrigir:
> >
> > $ sed '/^[0-9]-$/!x;1d;$p;$x' temp.txt | sed
> > '/^[0-9]-/{N;s/^\([0-9]-\)\n\(.*\)$/\2 \1/}'
> > 123456 1-
> > asdfghj 2-
> > bnm,,.;
> > dfghjkl 3-
> > ertyuio
> >
> > Um abraço.
> >
> > > -----Original Message-----
> > > From: Marcio Gil
> > >
> > > Acho que consegui:
> > >
> > > $ cat temp.txt
> > > 123456
> > > 1-
> > > asdfghj
> > > 2-
> > > bnm,,.;
> > > cvbnm,.
> > > dfghjkl
> > > 3-
> > > ertyuio
> > > $ sed '/^[0-9]-$/!x;1d;$p;$x' temp.txt | sed 'N;s/-\n/-/'
> > > 1-123456
> > > 2-asdfghj
> > > bnm,,.;
> > > cvbnm,.
> > > 3-dfghjkl
> > > ertyuio
> > > $
> > >
> > > Explicando:
> > >
> > > /^[0-9]-$/!x # Se a linha não é de numeração,
> > > # troca com o "hold space";
> > > 1d # Exclui a primeira linha,
> > > # Pois esta fica em branco;
> > > $p # Imprime a última linha;
> > > $x # E o que restou no "hold space".
> > >
> > > Para juntar as linhas eu descobri este site:
> > >
> > > http://thobias.org/doc/sosed.html#toc31
> > >
> > > Agora só falta juntar tudo num único sed :-)
> > >
> > >
> > > > -----Original Message-----
> > > > From: Marcio Gil
> > > >
> > > > Consegui fazer isto aqui:
> > > >
> > > > $ cat temp.txt
> > > > 123456
> > > > 1-
> > > > asdfghj
> > > > 2-
> > > > bnm,,.;
> > > > cvbnm,.
> > > > dfghjkl
> > > > 3-
> > > > ertyuio
> > > > $ sed '/^[0-9]-$/!x;1d;$p;$x' temp.txt
> > > > 1-
> > > > 123456
> > > > 2-
> > > > asdfghj
> > > > bnm,,.;
> > > > cvbnm,.
> > > > 3-
> > > > dfghjkl
> > > > ertyuio
> > > > $
> > > >
> > > > Quer dizer, pude colocar a numeração antes das linhas.
> > > >
> > > > Agora só falta juntar as linhas com numeração com as linhas
> > > > seguintes... mas ainda não consegui. Alguem sabe como
> > > > juntar estas linhas?
> > > >
> > > > já tentei assim:
> > > >
> > > > $ sed '/^[0-9]-$/!x;1d;$p;$x' temp.txt | sed 's/-\n//'
> > > >
> > > > mas não funciona :-(
> > > >
> > > > > -----Original Message-----
> > > > > From: Eduardo
> > > > >
> > > > > Senhores,
> > > > >
> > > > > tenho o seguinte problema:
> > > > >
> > > > > Tenho uma frase... <quebra de linha>
> > > > > 1-
> > > > >
> > > > > Toda vez que tiver uma frase e na linha seguinte aparecer
> > > > > um número seguido de traço "-" tenho que remover a quebra
> > > > > de linha e deixar tudo na mesma linha.
> > > > >
> > > > > Já tentei de tudo pelo SED mas não consegui.
> > > > >
> > > > > Antecipadamente obrigado.
> > > > >
> > > > > --
> > > > > ----------
> > > > >
> > > > >
> > > > > Eduardo
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
- Quebra de linha, Eduardo, 2009/12/14
- Re: [shell-script] Quebra de linha, miranda, 2009/12/14
- Re: [shell-script] Quebra de linha, Marcelo Andrade, 2009/12/14
- RE: [shell-script] Quebra de linha, Marcio Gil, 2009/12/14
- RE: [shell-script] Quebra de linha, Marcio Gil, 2009/12/14
- RE: [shell-script] Quebra de linha, Marcio Gil, 2009/12/14
- RE: [shell-script] Quebra de linha, Marcio Gil, 2009/12/14
- Re: Quebra de linha,
slackmonio <=
- Re: Quebra de linha, Marcio Gil, 2009/12/16
- Re: Quebra de linha, Marcio Gil, 2009/12/16
- Re: Quebra de linha, slackmonio, 2009/12/16