Como remover o novo caractere de linha no final da linha que termina com um número?

0

Eu tenho um arquivo como o mostrado abaixo. Desejo remover o caractere de nova linha se a linha terminar com um número (preferencialmente sed ou awk ).

arquivo.txt:

some question:       1404241

what's your name?

1498646

my name is Bond.

Então eu quero a saída como abaixo:

some question:       1404241 what's your name? 

1498646 my name is Bond.
    
por A.gargi 27.11.2015 / 11:24

2 respostas

1

Na verdade, com sua entrada / saída, você está removendo várias novas linhas. Isso torna o problema um pouco mais difícil, porque coisas como sed - como padrão iteram uma linha por vez.

Sugiro usar algo como perl:

#!/usr/bin/env perl
use strict;
use warnings;

#read everything
local $/;
#do replacement of a digit, following by one - or more - linefeeds. 
#m is multi-line, r is 'return the result' (to print)
#g is do it repeatedly. 
print <DATA> =~ s/(\d)\n+/$1 /mrg;

__DATA__
some question:       1404241

what's your name?

1498646

my name is Bond.

Isto imprime:

some question:       1404241 what's your name?

1498646 my name is Bond.

Isso pode ser transformado em um único liner:

perl -0777 -e 'print <> =~ s/(\d)\n+/$1 /mgr'
    
por 27.11.2015 / 12:32
0
sed -e:n -e'$!N;s/\([0-9]\)\n//;tn' -eP\;D <infile >outfile

... para que a remoção seja solicitada, mas não obtém o resultado solicitado. Provavelmente o que você quer é substituir uma nova linha seguindo um número com um espaço, certo?

sed -e:n -e'/[0-9]$/{$!N;s/\n$//;}' -etn -e's/\n/ /' <infile >outfile

... isso deve ser mais eficiente, de qualquer forma.

    
por 27.11.2015 / 11:35