sed для печати шаблона, который охватывает линии

Я изучаю sed, и в настоящее время я придерживаюсь следующей проблемы:

Я хочу извлечь строки, найденные между ^C 's, из следующего вывода:

 banner exec ^C This is the banner ^C banner motd ^C This is the MOTD banner ^C ! line con 0 exec-timeout 0 0 privilege level 15 logging synchronous 

Я использую это как ссылку, но это не кажется хорошей идеей, если вы не знаете, сколько строк вы будете захватывать. Какой был бы лучший способ справиться с этим?

что-то вроде этого должно работать, если исходные данные находятся в файле test.txt, это использует grep, чтобы исключить строки, содержащие «^ C»:

 sed -n '/\^C/,/\^C/p' test.txt|grep -v '\^C' 

Вывод из вашего примера:

 This is the banner This is the MOTD banner 

Итак, я понял это. Похоже, это трюк:

 sed -n '/\^C/,/\^C/{/\^C/!{p}}' input 

По-видимому, вы можете запускать sed между двумя согласованными регулярными выражениями, поэтому я просто ставил такое же регулярное выражение как начало и конец /\^C/,/\^C/ а затем печатал строки, пропуская последнюю строку, содержащую тот же шаблон.

Я не знаю, является ли это лучшим методом, но, похоже, он работает.