bash: limpar string entre duas posições

1

Eu preciso limpar o string no terminal entre duas posições (não o começo ou o fim da linha). Por exemplo, exclua todos a partir de tput cup 5 10 e até tput cup 5 69 . Uma linha.

Sim, é possível simplesmente echo por espaços em toda essa região, mas, talvez, haja uma maneira melhor? Algo como clear 10 69 na posição atual da linha do cursor.

    
por Someone 24.11.2016 / 19:46

3 respostas

4

Você está procurando a sequência de controle apagar caractere (s) .

tput cup 5 10 ; tput ech 59

Isso não deve ser confundido com excluir caractere (s) .

tput cup 5 10 ; tput dch 59

A exclusão substitui por espaços em branco. A exclusão move o restante da linha para a esquerda.

    
por 24.11.2016 / 20:05
2

Como observado, ech ( apagar caracteres ) é o caminho a seguir - quando funciona. Isso veio com o VT102, então a maioria dos terminais que você usaria fornecem o recurso.

Para descrições de terminal de ncurses, há um problema com a cor: o desenvolvedor do rxvt em 1995-1996 usou uma interpretação diferente da idéia para limpar as cores de segundo plano e não (como o console Linux e o xterm) tratar erases o mesmo que limpar . Portanto, ech limpa a cor padrão, enquanto ed ( apagar exibição ) é apagado com a cor ANSI atual. A descrição do terminal ncurses omite ech por esse motivo. O mesmo problema se aplica a todos os programas derivados dessa fonte.

Leitura adicional:

       cursor_address            cup    cm   move to row #1 columns #2

       erase_chars               ech    ec   erase #1 characters (P)
  • tput , reset - inicializa um terminal ou consulta terminfo    banco de dados
por 24.11.2016 / 22:13
-1

Você pode usar sed para fazer isso, veja o seguinte

echo "string" | sed -e '/ start /, / end /' | sed-e 's / pattern / replace / g'

    
por 24.11.2016 / 19:55