grep – показать строки до определенного шаблона

Я на Ubuntu 16.04, и я хочу искать файлы, скажем, «если», и я хочу, чтобы результат до «endif». Файл может выглядеть так:

if … SOME CODE endif 

Я могу сделать это с помощью grep -A9 if my_file | grep -B9 endif grep -A9 if my_file | grep -B9 endif . Это не работает, если предложение «if» больше 9 и если несколько предложений «если» находятся в одном файле, и если первая команда grep содержит несколько предложений «if». Опция -m1 во втором grep не помогает. Вложенные «if» предложения могут быть проигнорированы. У кого-то есть идея, может быть, не с grep?

Отличие от того, как мне использовать grep для нескольких шаблонов на нескольких строках?

  1. Вопрос задает решение с grep который ответили уже в вопросе: grep -A9 if my_file | grep -B9 endif grep -A9 if my_file | grep -B9 endif . Решение не работает в моем случае, но будет работать в случае другого вопроса.

  2. Предлагаемые grep-решения другого вопроса не работают (с Ubuntu?): grep: ein nicht geschütztes ^ oder $ wird mit -Pz nicht unterstützt. что-то вроде grep: a not protected ^ or $ is not supported with -Pz . Я использую следующее:

     root:/tmp# cat file Some text begin Some text goes here. end Some more text root:/tmp# grep -Pzo "^begin\$(.|\n)*^end$" file grep: ein nicht geschütztes ^ oder $ wird mit -Pz nicht unterstützt 
  3. Предлагаемые решения ищут только шаблон, который начинается в начале строки, если я правильно интерпретирую предлагаемое решение. Даже если я удалю, команда не работает.