I am looking for a way within any of the common chess packages to search for a specific maneuver - rook takes bishop that is protected (i.e. an exchange sacrifice)? I've heard of CQL, but never used, so I would be curious if it supports something like this.
Chess Query Language does do this very well. The following short .cql file works like a charm to find all games in input.pgn in which one side is up an exchange (while allowing a difference in the number of pawns for each side) for 4 straight moves (picked so as to rule out, say, situations in which an equal sequence of trades happens to begin with a rook taking a minor piece, or other such temporary pseudo-sacrifices).
Standard point values for pieces are used, so the