Grep and display multiple lines

Hi guys,

I have a log file that generates multiple logs about a query.

<query time='2016-04-13 13:01:50.825'>
  <PagingRequestHandler>
    <Before>brand:vmu</Before>
    <After>brand:vmu</After>
  </PagingRequestHandler>
  <GroupDeviceFilterHandler>
    <Before>brand:vmu</Before>
    <After>(brand:vmu) AND ( (type:shipping))</After>
  </GroupDeviceFilterHandler>
  <MultilangHandler>
    <Before>(brand:vmu) AND ( (type:shipping))</Before>
    <After>(brand:vmu) AND ( (type:shipping))</After>
  </MultilangHandler>
  <NumberFieldQueryRequestHandler>
    <Before>(brand:vmu) AND ( (type:shipping))</Before>
    <After>(brand:vmu) AND ( (type:shipping))</After>
  </NumberFieldQueryRequestHandler>
  <OnlyAviableAssetsRequestHandler>
    <Before>(brand:vmu) AND ( (type:shipping))</Before>
    <After>((brand:vmu) AND ( (type:shipping))) AND startTime:[0 TO 20160413180150825] AND (validUntil:notset OR validUntil:[20160413180150825 TO A])</After>
  </OnlyAviableAssetsRequestHandler>
  <RequestValidator>
    <Before>((brand:vmu) AND ( (type:shipping))) AND startTime:[0 TO 20160413180150825] AND (validUntil:notset OR validUntil:[20160413180150825 TO A])</Before>
    <After>((brand:vmu) AND ( (type:shipping))) AND startTime:[0 TO 20160413180150825] AND (validUntil:notset OR validUntil:[20160413180150825 TO A])</After>
  </RequestValidator>
  <QueryRequest langCode='en' pageSize='10' startIndex='1'>((brand:vmu) AND ( (type:shipping))) AND startTime:[0 TO 20160413180150825] AND (validUntil:notset OR validUntil:[20160413180150825 TO A])</QueryRequest>
  <QueryResult time='2016-04-13 13:01:50.889' totalRows='2' lastRow='2'/>
</query>

What I am interested in are 2 lines:

<query time='2016-04-13 13:01:50.825'>
<QueryResult time='2016-04-13 13:01:50.889' totalRows='2' lastRow='2'/>

I want to print these two lines for each block of <query>

I am trying something like this:

grep "query time" trace.log ; grep -A30 "query time" contentx-indexer-trace.log | grep "QueryResult time"

But all I can see is :

  <QueryResult time='2016-04-13 13:12:06.134' totalRows='27' lastRow='20'/>
  <QueryResult time='2016-04-13 13:12:06.223' totalRows='27' lastRow='27'/>
  <QueryResult time='2016-04-13 13:12:06.638' totalRows='52' lastRow='20'/>
  <QueryResult time='2016-04-13 13:12:06.668' totalRows='52' lastRow='40'/>
  <QueryResult time='2016-04-13 13:12:06.698' totalRows='52' lastRow='52'/>
  <QueryResult time='2016-04-13 13:12:09.292' totalRows='1' lastRow='1'/>

Any idea how can I get the query time and then its corresponding QueryResult time ?

maybe something like:

sed -n '/<query time=/p; /<QueryResult time=/p;' logfile

Try "alternation":

grep "<query time\|<QueryResult" file

Do you mean:

grep -E '<query time|<QueryResult' file

?

--
Note: The use of \| with grep Basic Regular Expressions (BRE) is a GNU extension