我需要清除终端中两个位置之间的字符串(不是行的开头或结尾)。例如,删除从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 终端描述被省略。同样的问题也适用于从该源派生的所有程序。
进一步阅读:
- 我的终端显示一些未着色的空间
- terminfo——终端能力数据库,你会
tput
使用cup
和ech
能力:
cursor_address cup cm 移至第 1 行第 2 列 eraser_chars ech ec 擦除 #1 个字符 (P)
答案3
您可以使用 sed 来做到这一点,请参阅以下内容
回显“字符串”| sed -e '/开始/,/结束/' | sed -e 's/模式/替换/g'