2017-01-08 11 views
1

Я хочу сделать то же самое, как и вИзвлечения строки между двумя шаблонами из файла, не включая конечный шаблон соответствует

Extract lines between two patterns from a file

, но я хочу, чтобы не бы линии с окончанием печататься , Теперь, я полагаю, я мог бы сгладить результаты решений этого вопроса, но могу ли я сделать sed или awk решениями, использующими какой-то вид, чтобы не печатать строку, соответствующую шаблону окончания?

+0

На мгновение я пропустил, что это идеальный дубликат! Я рекомендую, по крайней мере, попробовать google заголовок вашего предполагаемого вопроса, прежде чем нажать кнопку отправки. ;) – hek2mgl

+0

@ hek2mgl: На самом деле я сделал некоторые поисковые запросы, но это привело к тому, что мне не нравилось ... – einpoklum

+1

Не беспокойтесь, я надеюсь, что ответы в этой теме полезны для вас. – hek2mgl

ответ

1

Как это:

sed -n '/begin/,/end/{/end/!p}' 

Это будет печатать все строки в диапазоне begin - end кроме строки, содержащей end себя от выхода.

+0

Это потенциально также исключает первую строку, если она также соответствует «концу». – andlrc

+1

@andlrc: Я не думал об этом, но, если это так, то мой вопрос довольно слабо определен. Так что это нормально, я думаю. – einpoklum

+0

Согласен, если строка, содержащая 'begin', также содержит' end', границы диапазона были бы плохо выбраны. – hek2mgl

1

Использование AWK можно управлять легко:

$ awk '/begin/{p=1};/end/{p=0};p' input 

Разбивка:

/begin/{p=1} # When current line matches `begin' then set p = 1 
/end/{p=0} # When current line matches `end' then set p = 0 
p   # Print lines when p is truly, in this case when it's 1. 
      # `p' starts empty, and will later be set to 0, which 
      # are both falsy values. 
      # It's only in the state p = 1 that the lines are printed. 

Вы могли бы теперь обратите внимание, как вы можете переместить p вокруг, чтобы получить другой результат т.е. печатать строки между begin и end, но не его линии:

p; /begin/{p=1}; /end/{p=0} 
+0

Просто из любопытства вы можете объяснить, как вы командуете, это способ группировать команды в awk? – Vicky

+0

@ user3369871 Обновлено с объяснением. – andlrc