Adicione um espaço ou tab antes do último caractere em cada linha

3

Eu tenho um arquivo com uma lista de valores que terminam com uma letra. Existe uma maneira fácil de adicionar um espaço ou guia antes do último caractere de cada linha para separar o número da letra?

44A  
354T  
1453C  
77D

Para que a saída seja assim:

44 A  
354 T  
1453 C  
77 D
    
por luongje 07.10.2015 / 21:40

4 respostas

6

Se você nunca tiver nenhum espaço em branco após o último caractere e antes do final da linha, use:

sed 's/.$/ &/' file

ou

perl -pe 's/.$/ $&/' file

Se você puder ter espaço em branco antes do final da linha, use isso:

perl -pe 's/(.*)(\S)/$1 $2/' file
    
por 07.10.2015 / 21:44
3

Isso funciona para o caso indicado:

sed 's/\(.\)$/\ /' file.txt 

Ele será quebrado se você quiser um espaço em qualquer outro lugar.

    
por 07.10.2015 / 21:42
1

se as linhas não estiverem vazias ...

perl -pe 'substr($_,-2,0)=" "'
    
por 08.10.2015 / 01:43
0

No vi, você pode fazer isso com:

:%s/\(.\)$/ /

Dividido, isto é:

:%s    #Apply substitution to all lines
   /\(.\)$    #Search for a single character followed by the end of the line
          / /    #Replace with a space followed by that character

Isto supõe que você não tem nenhum espaço em branco no final de suas linhas. Se isso não for sempre o caso, use:

:%s/\(\S\)\s*$/ /

Isso eliminará qualquer espaço em branco à esquerda e adicionará um único espaço antes do último caractere restante em cada linha.

    
por 08.10.2015 / 03:16