[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 17:56:41 -0000 |
User-agent: |
eGroups-EW/0.82 |
Exatamente, arquivo grande irá consumir muita memoria para armazenar, por isso
utilizar N, H, etc no arquivo todo não é viavel na maioria dos casos.
Vi um outro modo aqui, nao sei se eh mais rapido, mas ele nao utiliza muito
armazenamento (= 2 linhas) e nao utiliza o buffer auxiliar.
=> Armazenar (N) no PATT a linha da frente na linha atual.
Se temos string\nnumero-, entao fazemos a substituicao e mostramos o resultado.
No caso contrario, teremos string1\nstring2, então mostramos (P) e deletamos
(D) string1\n e repetimos os comandos SED, sendo que agora a string2 é a linha
atual no PATT:
$ sed 'N;/\n[0-9]-/s,\(.*\)\n\(.*\),\2\1,; /\n/{P;D;}'
--- Em address@hidden, "Marcio Gil" <marciomgil@...> escreveu
>
> Legal, mas se o arquivo for grande vai consumir muita memória.
> E o SED? Impõe algum limite para o tamanho da linha?
>
> Andei estudando o SED e descobri que '{x;H;x}' é exatamente o mesmo
> que 'G', então dá para simplificar um pouco mais:
>
> $ cat temp.txt
> 123456
> 1-
> asdfghj
> 2-
> bnm,,.;
> dfghjkl
> 3-
> ertyuio
>
> Numeração pré-posta, com "sed -n":
>
> $ sed -n '/^[0-9]-$/!{x;1!p};//{G;s/\n//;h};${g;p}' temp.txt
> 1-123456
> 2-asdfghj
> bnm,,.;
> 3-dfghjkl
> ertyuio
>
> Numeração pré-posta, com "sed" sem a opção "-n":
>
> $ sed '/^[0-9]-$/!{x;1d};//{G;s/\n//;h;d};$g' temp.txt
> 1-123456
> 2-asdfghj
> bnm,,.;
> ertyuio
>
> Numeração pós-posta, com "sed -n":
>
> $ sed -n '/^[0-9]-$/!{x;1!p};//{H;g;s/\n//;h};${g;p}' temp.txt
> 1234561-
> asdfghj2-
> bnm,,.;
> dfghjkl3-
> ertyuio
>
> Numeração pós-posta, com "sed" sem a opção "-n":
>
> $ sed '/^[0-9]-$/!{x;1d};//{H;g;s/\n//;h;d};$g' temp.txt
> 1234561-
> asdfghj2-
> bnm,,.;
> ertyuio
>
>
> > -----Original Message-----
> > From: slackmonio
> >
> > 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.
> > >
> >
>
- Re: [shell-script] Quebra de linha, (continued)
- 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, 2009/12/16
- Re: Quebra de linha, Marcio Gil, 2009/12/16
- Re: Quebra de linha, Marcio Gil, 2009/12/16
- Re: Quebra de linha,
slackmonio <=