16

I am on Ubuntu 16.04 and I want to search files for let’s say “if” and I want to the output until “endif”. The file could look like this

if …
  SOME CODE
endif

I can do this with grep -A9 if my_file | grep -B9 endif. This doesn’t works if the “if” clause is larger than 9 and if several “if” clauses are in the same file and if the first grep command contains several “if” clauses. The option -m1 in the second grep doesn’t help. Nested “if” clauses can be ignored. Has somebody an idea, maybe not with grep?

Difference to How do I grep for multiple patterns on multiple lines?

  1. The question asks for a solution with grep which is answered already in the question: grep -A9 if my_file | grep -B9 endif. The solution doesn’t work in my case but would work in the case of the other question.

  2. The proposed grep solutions of the other question don’t work (with Ubuntu?): grep: ein nicht geschütztes ^ oder $ wird mit -Pz nicht unterstützt. which is something like grep: a not protected ^ or $ is not supported with -Pz. I use the following:

    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. The proposed solutions search only for pattern which start at the beginning of the line if I interpret the proposed solution correctly. Even if I remove ^ the command doesn't work.

musbach
  • 1,445
  • About 2: Show us what pattern you used with grep -Pz. 3. What is a "pure Linux solution"? 4. grep can look anywhere in the line. – muru Nov 14 '16 at 01:57
  • You can edit your post, as you very well know. 3) LOL, Perl is not a secondary package by a long shot. It's as likely to be present on any Linux system as grep or sed. 4) So you know what ^ does.
  • – muru Nov 15 '16 at 01:13
  • The trick was to put 8 (!) blanks in front because it is inside of a numbering. 3) I refer to the pcregrep and so on of the answer of steeldriver. But it is a matter of tasked, as I said. Anyway I have taken it out. 3) Yes, but even without ^ it doesn’t work.
  • – musbach Nov 15 '16 at 07:59
  • 1
    The title doesn't fit the question: it should be Show lines between two patterns. Whoever wants lines from the first line on, doesn't get his answer here – Bilow Dec 12 '18 at 13:08