Resposta atualizada para ser uma solução mais geral. veja também minha outra resposta abaixo usando apenas a expansão de chave de concha e pritnf
.
$ str='Hello World!'
$ sed -r ':loop; s/ (=*):$/=:/; t loop' <<< "$(printf '%-20s:\n' "$str" )"
Hello World!========:
Como funciona?
este (=*):$/
captura um espaço, um ou mais =
que é seguido por dois pontos :
no final de sua entrada; nós fazemos o conjunto de =
como uma correspondência de grupo e será sua referência de volta.
Com :loop
, definimos um rótulo denominado loop
e, com t loop
, ele passa para esse rótulo quando um s/ (=*):$/=:/
fez uma substituição bem-sucedida;
Na peça de substituição com =:
, ele sempre aumentará o número de =
s e retornará o próprio ponto até o final da string.