Я знаю, что могу удалить последние три символа с помощью:
echo -ne '\b\b\b'
Но как я могу удалить полную строку? Я имею в виду, я не хочу использовать:
echo -ne '\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b'
... и т.д ... чтобы удалить длинную строку.
command-line
echo
LanceBaynes
источник
источник
echo -ne "\033[2K" ; printf "\r"
теперь строка хороша как новая, как если бы она никогда не была написана раньше.echo -ne "\e[2K\r"
. Но ANSI escape-последовательности FTW, тем не менее.Ответы:
Вы можете использовать
\b
или,\r
чтобы переместить курсор назад, а затем перезаписать напечатанный символ новым символом. Обратите внимание , что ни\b
ни\r
удаляет напечатанные символы. Он просто перемещает курсор назад.\b
перемещает курсор назад на один символ и\r
перемещает курсор в начало строки.Пример: оба
а также
напечатает:
Если вы хотите удалить символы, используйте следующий обходной путь:
выход:
Выдержка из
man echo
:источник
echo -e 'fooooooooo\rbar
перекликается с barooooooo.echo -e 'foooo\b\b\b\b\b\b\b\b\b\bbar'
также отголоскиbaroo
.printf
.Вы ищете терминальные побеги . В частности, очистить от позиции курсора до начала строки:
Или все в строке, независимо от положения курсора:
И вы можете делать все другие аккуратные трюки с терминальными выходами тоже.
источник
-e
какecho
аргумент не соответствует POSIX + мне не нравятся escape-последовательности. Либо предпочитаю,printf
либоtput
.-e
параметр forecho
не соответствует POSIX, но все же ...Если вы хотите очистить линию, я предлагаю вам использовать комбинацию возврата каретки, которую упоминают люди и terminfo.
Это запишет
xyzzyxyzzy
, затем вернется в начало строки и отправит последовательность «до конца строки» на терминал, затем запишетfoobar
. В-n
марке эха не добавляет символ новой строки послеfoobar
.источник
printf '%s\r%s%s' xyzzyxyzzy "$ceol" foobar
отношении переносимости и во избежание того, чтобы содержимое$ceol
проходило через\x
расширение.Вы явно просите
echo
, но этот запрос ограничивает вас. Вот подход, который использует встроеннуюprintf
команду bash с расширением скобок:источник
Вот пример использования echo без перевода строки
-n
и возврата каретки\r
.источник
Вместо
echo -en "\r"
вас также может оказатьсяprintf "\r"
полезной команда. Таким образом, вы можете отформатировать строку. например:Я обычно делаю это также при работе с медленным синтаксическим анализом файлов, чтобы отобразить имя файла, находящегося в процессе выполнения, без создания списка.
источник
Как вопрос удалить полную строку
Я использовал ниже команду с комбинацией
echo
и,sed
чтобы удалить строкуПосле выполнения команды результат будет пустым. Поскольку строка будет заменена на none
команда
источник
Вот пример таймера обратного отсчета, который я использую:
источник