n=$(sed -ne '/pattern2/,/pattern1/{/pattern1/=;}' yourfile | tail -n 1)
sed -i'' -e "${n}d" yourfile
# 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
Рабочий:
/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
:Этим мы отключаем модификатор соответствия шаблона /s
cloistered, что означает, что в этой части совпадения .
больше не соответствует новой строке, что означает, что мы не можем переходить дальше строк. Мы просто сопоставляем всю единственную строку с шаблоном1 и удаляем это. То, что остается в пространстве шаблона, печатается автоматически. -F
:Мы вызываем s///
с модификаторами /s
и /m
. Мы выборочно отключим модификатор /s
внутри регулярного выражения, чтобы адаптировать его к нашим потребностям. Чтобы временно восстановить нормальный терминал, вы можете использовать:
kill -28 $$
Вы должны поставить [ и ] вокруг любой не -печатаемой управляющей последовательности в вашей подсказке. Таким образом:
blue=$(tput setaf 4)
purple=$(tput setaf 5)
reset=$(tput sgr0)
export PS1="\[$blue\]\h:\[$purple\]\w\[$reset\]\\$ "
Так что перестаньте использовать необработанные коды ansi, это не читабельно, лучше используйте tput
.