bash:清除两个位置之间的字符串

bash:清除两个位置之间的字符串

我需要清除终端中两个位置之间的字符串(不是行的开头或结尾)。例如,删除从tput cup 5 10到 的所有内容tput cup 5 69。一条线。

是的,只需通过整个区域的空间就可以实现这一点echo,但是也许有更好的方法吗?类似于clear 10 69当前光标行位置。

答案1

您正在寻找删除字符控制序列。

tput cup 5 10 ; tput ech 59

这不要与删除字符

tput cup 5 10 ; tput dch 59

擦除会用空白覆盖。删除会将剩余的行向左移动。

答案2

如前所述,ech删除字符)是可行的方法——只要它有效。该功能随 VT102 一起提供,因此您使用的大多数终端都提供该功能。

对于 ncurses 的终端描述,存在颜色问题:rxvt 的开发人员在 1995-1996 年对清除背景颜色的想法使用了不同的解释,并且没有(像 Linux 控制台和 xterm 那样)对待擦除清算。因此ech使用默认颜色清除,而ed(擦除显示) 以当前 ANSI 颜色清除。ech因此,ncurses 终端描述被省略。同样的问题也适用于从该源派生的所有程序。

进一步阅读:

       cursor_address cup cm 移至第 1 行第 2 列

       eraser_chars ech ec 擦除 #1 个字符 (P)

答案3

您可以使用 sed 来做到这一点,请参阅以下内容

回显“字符串”| sed -e '/开始/,/结束/' | sed -e 's/模式/替换/g'

相关内容