bash: очистить строку между двумя позициями

К сожалению, это невозможно. Некоторые приложения, в более новых версиях которых введены новые необязательные синтаксисы, прибегают к комментариям «условной компиляции», ярким примером является MySQL.

Но, к счастью, OpenSSH еще не на этом этапе.

Возможное решение: если весь ваш домашний каталог смонтирован в разных операционных системах, вы можете добавить скрипт в свой .profile, который проверяет версию SSH и, если этого недостаточно для загрузки вашего файла конфигурации, псевдонимы ssh в ssh -F / dev / null . Например:

if [ "$(bc -l <<<"$(ssh -V 2> >(sed 's,^[^0-9]*,,;s,[^\.0-9].*,,')) < 6.5")" == 1 ]
then
    alias ssh="/usr/bin/ssh -F/dev/null"
fi

В качестве альтернативы, согласно комментарию @derobert, псевдонима может быть недостаточно для некоторых случаев использования, таких как использование rsync или других приложений, которые используют OpenSSH в качестве транспорта и вызывают ssh напрямую (не позволяя оболочке разрешить псевдоним). Если это действительно проблема, вы можете создать сценарий с именем ssh в вашем локальном каталоге bin (обычно ~ / bin или ~ / .local / bin ). Когда приложение разрешает путь к двоичному файлу ssh , оно должно увидеть ваш локальный каталог bin в начале пути и запустить ваш сценарий, который затем выполнит требуемую логику.

Может быть, что-то вроде этого:

#!/bin/bash
if [ "$(bc -l <<<"$(ssh -V 2> >(sed 's,^[^0-9]*,,;s,[^\.0-9].*,,')) < 6.5")" == 1 ]
then
    /usr/bin/ssh -F/dev/null "$@"
else
    /usr/bin/ssh "$@"
fi
1
24.11.2016, 21:07
3 ответа

Вы ищете управляющую последовательность символа (ов) стирания .

tput cup 5 10 ; tput ech 59

Не следует путать с символом удаления .

tput cup 5 10 ; tput dch 59

При стирании остаются пустые места. Удаление перемещает оставшуюся часть строки влево.

3
27.01.2020, 23:16

Для этого вы можете использовать sed, см.

эхо "строка" | sed -e '/ начало /, / конец /' | sed -e 's / pattern / replace / g'

-1
27.01.2020, 23:16

Как уже отмечалось, ech ( удалить символы ) - это правильный путь, если он работает. Это входило в комплект поставки VT102, поэтому большинство терминалов, которые вы будете использовать, предоставляют эту функцию.

Для описаний терминалов из ncurses существует проблема с цветом: разработчик rxvt в 1995–1996 годах использовал другую интерпретацию идеи об очистке фоновых цветов и не (как это делают консоль Linux и xterm) не обрабатывал стирание то же, что и очистка . Таким образом, ech очищается с использованием цвета по умолчанию, а ed ( erase display ) очищается с текущим цветом ANSI. По этой причине в описании терминала ncurses отсутствует ech . Та же проблема относится ко всем программам, полученным из этого источника.

Дополнительная литература:

       cursor_address            cup    cm   move to row #1 columns #2

       erase_chars               ech    ec   erase #1 characters (P)
1
27.01.2020, 23:16

Теги

Похожие вопросы