[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Quebra de linha
From: |
Marcio Gil |
Subject: |
Re: Quebra de linha |
Date: |
Wed, 16 Dec 2009 11:33:10 -0200 |
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.
> >
>
- 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, 2009/12/16
- Re: Quebra de linha,
Marcio Gil <=
- Re: Quebra de linha, Marcio Gil, 2009/12/16
- Re: Quebra de linha, slackmonio, 2009/12/16