Using awk
or sed
how can I select lines which are occurring between two different marker patterns? There may be multiple sections marked with these
Use awk
with a flag to trigger the print when necessary:
$ awk '/abc/{flag=1;next}/mno/{flag=0}flag' file
def1
ghi1
jkl1
def2
ghi2
jkl2
How does this work?
/abc/
matches lines having this text, as well as /mno/
does. /abc/{flag=1;next}
sets the flag
when the text abc
is found. Then, it skips the line. /mno/{flag=0}
unsets the flag
when the text mno
is found.flag
is a pattern with the default action, which is to print $0
: if flag
is equal 1 the line is printed.For a more detailed description and examples, together with cases when the patterns are either shown or not, see How to select lines between two patterns?.