Como imprimir à esquerda e à direita da saída já impressa

1

Eu tenho um comando que diz printf "%5s1" e sua saída é:

    1

Como posso imprimir o dígito 2 para a esquerda e o dígito 3 para a direita do 1 já impresso. Então, a saída se parece com abaixo:

   213

Portanto, há uma condição aqui em que 1 já foi impresso usando o comando printf "%5s1" .

Eu tentei usar o comando abaixo

 printf "%5s1";printf "\r%4s2%1s3\n"

mas isso sobrescreve a saída existente 1 e eu fico abaixo da saída.

   2 3

Como posso imprimir um dígito do lado direito do dígito já impresso 1 usando printf sem perdê-lo, supondo que eu tenha que usar printf "%5s1" primeiro? Estou procurando por algo como:

printf "%5s1";printf "\r%4s2???\n"
    
por g4ur4v 29.08.2013 / 21:41

3 respostas

4
left=$(tput cub1) right=$(tput cuf1)
printf %5s1; printf '%s\n' "$left${left}2${right}3"

Detalhes

Do BTO Prompt HOWTO :

tput cub1
move left one space

tput cuf1
non-destructive space (move right one space)
    
por 29.08.2013 / 21:54
4

Simplesmente inverta a ordem na qual você está imprimindo e imprima a string que você precisa à direita primeiro:

printf "%5s1";printf "3\r%4s2\n"
    
por 29.08.2013 / 21:45
1

Além disso, use \b para backup:

$ printf "%5s1";printf "3\b\b\b2\n"
    213
    
por 29.08.2013 / 22:05

Tags