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

[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.
> > 
> 



reply via email to

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