O seguinte script Python faz a filtragem desejada.
#!/usr/bin/python
import re
# Bibliography entries to retrieve
# Multiple pattern compilation from: http://stackoverflow.com/a/11693340/147021
pattern_strings = ['Author2010', 'Author2012',]
pattern_string = '|'.join(pattern_strings)
patterns = re.compile(pattern_string)
with open('bibliography.bib', 'r') as bib_file:
keep_printing = False
for line in bib_file:
if patterns.findall(line):
# Beginning of an entry
keep_printing = True
if line.strip() == '}':
if keep_printing:
print line
# End of an entry -- should be the one which began earlier
keep_printing = False
if keep_printing:
# The intermediate lines
print line,
Pessoalmente, prefiro mudar para uma linguagem de script quando a lógica de filtragem se torna complexa. Isso, talvez, tenha uma vantagem sobre o fator de legibilidade, pelo menos.