Como pode preencher caracteres apenas em sed

1

Eu tenho este arquivo. Eu quero usar apenas sed, sem awk

FSDFDSFSD
FDSFD
FHGDHFDHGHFGHGHGF
HHGDF
GFDGDFGFDG
GFDGFDGFDGDFGDGD

Eu quero preencher todas as linhas ímpares adicionadas a 000 para que o total de caracteres seja 30 em cada linha

Eu quero saída como

FSDFDSFSD0000000000
FDSFD
FHGDHFDHGHFGHGHGF00
HHGDF
GFDGDFGFDG000000000
GFDGFDGFDGDFGDGD
    
por user825904 06.02.2013 / 08:32

2 respostas

6

Um caminho:

sed -e :a -e 's/^.\{1,29\}$/&0/;ta' -e n file

Corresponda a qualquer caractere (.) e combine de 1 a 29 caracteres do mesmo tipo (1,29). Se a correspondência for bem sucedida, coloque um '0' atrás do padrão correspondente ( & ). Quando a correspondência falha, o que significa que quando a contagem de caracteres excluindo o primeiro caractere excede 29, pare e, portanto, obtemos a string zero preenchida por 30.

n no final simplesmente lê a próxima linha e imprime. Desta forma, as linhas pares numeradas são impressas intocadas.

Executando o script acima:

$ sed -e :a -e 's/^.\{1,29\}$/&0/;ta' -e n file
FSDFDSFSD000000000000000000000
FDSFD
FHGDHFDHGHFGHGHGF0000000000000
HHGDF
GFDGDFGFDG00000000000000000000
GFDGFDGFDGDFGDGD
    
por 06.02.2013 / 08:47
4

Outra abordagem:

sed 's/$/000000000000000000000000000000/;s/\(.\{30\}\).*//;n'

Isso seria mais rápido que a abordagem iterativa ao acrescentar um caractere por vez, mas observe que truncaria linhas com mais de 30 caracteres em primeiro lugar.

    
por 06.02.2013 / 15:14

Tags