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

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

RE: [shell-script] Quebra de linha


From: Marcio Gil
Subject: RE: [shell-script] Quebra de linha
Date: Mon, 14 Dec 2009 23:25:58 -0200

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



reply via email to

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