Установка PS1 в macOS Catalina приводит к тому, что приглашение терминала перекрывается при изменении размера окна.

Сэд:

n=$(sed -ne '/pattern2/,/pattern1/{/pattern1/=;}' yourfile | tail -n 1)
sed -i'' -e "${n}d" yourfile

Сед :за 1 -проход

# invoke GNU sed with extended RE(-E), slurp mode(-z), in-place editing(-i) options
sed -i -Eze '
   h;s/(.*pattern2[^\n]*)\n.*/\1/p;   # traverse till the last pat2 line and print it
   g;s/.*pattern2[^\n]*(\n.*)/\1/;    # remove till the last pat2 line
   s/\n[^\n]*pattern1[^\n]*//;        # now look for the 1st occurrence of pat1
   ;                                  # clip that line, & print what remains
' inp

Рабочий:

  • Определите номер строки /pattern1/, но он должен лежать только в правильном диапазоне, т. е. /pattern2/,/pattern1/для того, чтобы он учитывался.
  • Возьмите последнее из этих чисел.
  • На втором проходе укажите номер строки, определенный выше, и удалите эту строку.

Перл:

     |----A---|   |----B----|--------C--------|D|----------E---------|-F-|
perl -0777pi -e 's/.*pattern2(?:(?!pattern1).)*\K(?-s:\n.*pattern1.*$)//ms' yourfile
  • A:Вызов Perlв режиме slurp(-0777)+ line-by-lineчтение -в +autoprint(-p)включено, in-placeредактирование(-i)
  • B+C:Перейдите к последнему вхождению шаблона2, затем замедлите движение и двигайтесь устойчиво, очищая не шаблон1
  • D:Когда вы доберетесь сюда, это будет последний пит-стоп, где шаблон 1 не был замечен после последнего шаблона 2, отметьте его \K. это означает, что это не появится в потребляемой части ввода, а только в согласованной части.
  • E:Этим мы отключаем модификатор соответствия шаблона /scloistered, что означает, что в этой части совпадения .больше не соответствует новой строке, что означает, что мы не можем переходить дальше строк. Мы просто сопоставляем всю единственную строку с шаблоном1 и удаляем это. То, что остается в пространстве шаблона, печатается автоматически.
  • -F:Мы вызываем s///с модификаторами /sи /m. Мы выборочно отключим модификатор /sвнутри регулярного выражения, чтобы адаптировать его к нашим потребностям.
0
10.12.2019, 03:14
1 ответ

Чтобы временно восстановить нормальный терминал, вы можете использовать:

kill -28 $$

Вы должны поставить [ и ] вокруг любой не -печатаемой управляющей последовательности в вашей подсказке. Таким образом:

blue=$(tput setaf 4)
purple=$(tput setaf 5)
reset=$(tput sgr0)
export PS1="\[$blue\]\h:\[$purple\]\w\[$reset\]\\$ "

Так что перестаньте использовать необработанные коды ansi, это не читабельно, лучше используйте tput.

Проверитьhttps://mywiki.wooledge.org/BashFAQ/053

0
28.01.2020, 03:02

Теги

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