sed -n '/^START=A$/,/^END$/p' data
The -n option means that it does not print by default; then the script says: "Print between the line containing START=A and the next END .
You can also do this with awk :
A pattern can consist of two patterns, separated by a comma; in this case, the action is performed for all lines from the occurrence of the first pattern, although the appearance of the second.
(from man awk on Mac OS X).
awk '/^START=A$/,/^END$/ { print }' data
Given the modified form of the data file in question:
START=A xxx01 xxx02 END START=A xxx03 xxx04 END START=A xxx05 xxx06 END START=B xxx07 xxx08 END START=A xxx09 xxx10 END START=C xxx11 xxx12 END START=A xxx13 xxx14 END START=D xxx15 xxx16 END
The output using GNU sed or Mac OS X (BSD) sed and using GNU awk or BSD awk is the same:
START=A xxx01 xxx02 END START=A xxx03 xxx04 END START=A xxx05 xxx06 END START=A xxx09 xxx10 END START=A xxx13 xxx14 END
Pay attention to how I changed the data file to make it easier to see where the various data blocks were printed in the file.
If you have another output requirement (for example, "only the first block between START = A and END" or "only the last ..."), then you need to clearly state this in the question.
Jonathan leffler
source share