J'ai un gros fichier bibtex avec de nombreuses entrées où chaque entrée a la structure générale
@ARTICLE{AuthorYear,
item = {...},
item = {...},
item = {...},
etc
}
(dans certains cas, ARTICLE
peut être un mot différent, par exemple BOOK
)
Ce que je voudrais faire, c'est écrire un script simple (de préférence juste un script shell) pour extraire les entrées avec AuthorYear donné et les mettre dans un nouveau fichier .bib.
Je peux imaginer que je peux reconnaître la première phrase d'une entrée par AuthorYear et la dernière par la fermeture unique }
et peut-être utiliser sed
pour extraire l'entrée, mais je ne sais pas vraiment comment faire exactement. Quelqu'un peut-il me dire comment j'y arriverais?
Cela devrait probablement être quelque chose comme
sed -n "/AuthorYear/,/\}/p" file.bib
Mais cela s'arrête en raison de la fermeture }
du premier élément de l'entrée, donnant ainsi cette sortie:
@ARTICLE{AuthorYear,
item = {...},
J'ai donc besoin de reconnaître si le }
est le seul caractère sur une ligne et de ne lire «sed» que lorsque c'est le cas.
sed
n'est pas du tout nécessaire, je pensais que ce serait l'option la plus simple. J'ai trouvé un code légèrement différent: sed -n "/AuthorYear/, /^ *\}/p"
qui semble faire exactement ce que je veux, y compris la fermeture }
et la correction des espaces s'il y en a
sed -n "/AuthorYear/,/\}$/p"
. Notez le$
symbole. Cela fonctionne très bien, sauf qu'il n'imprime pas la fermeture}
d'un bibitem. Btw, est-ce que l'utilisation desed
nécessaire?