Given a text file containing the following:
1
2
REGEX1
3 - multiple line block
4
REGEX2
5
6
REGEX1
7 - multiple line block
REGEX2
8
9
REGEX1
10 - multiple line block
I want to extract the following:
REGEX1
3 - multiple line block
4
REGEX1
7 - multiple line block
REGEX1
10 - multiple line block
i.e I want to extract lines including between REGEX1 and REGEX2 including REGEX1, but not REGEX2.
I have written a sed
script :
sed -n '/REGEX1/,/REGEX2/{/REGEX2/!p}' file
.
It works fine, but when given an instance like this:
1
2
REGEX2 REGEX1
3 - multiple line block
4
REGEX2
5
6
REGEX2 REGEX1
7 - multiple line block
REGEX2
8
9
REGEX2 REGEX1
10 - multiple line block
My script only gives me:
3 - multiple line block
4
7 - multiple line block
10 - multiple line block
Where as I want it to output to be:
REGEX2 REGEX1
3 - multiple line block
4
REGEX2 REGEX1
7 - multiple line block
REGEX2 REGEX1
10 - multiple line block
How can I achieve this, without inefficiency (like storing line numbers and going through the file once again) ?