Ho un grande file bibtex con molte voci in cui ogni voce ha la struttura generale
@ARTICLE{AuthorYear,
item = {...},
item = {...},
item = {...},
etc
}
(in alcuni casi ARTICLE
potrebbe essere una parola diversa, ad esempio BOOK
)
Quello che vorrei fare è scrivere un semplice script (preferibilmente solo uno script di shell) per estrarre le voci con il dato AuthorYear e metterle in un nuovo file .bib.
Posso immaginare di poter riconoscere la prima frase di una voce di AuthorYear e l'ultima dalla chiusura singola }
e forse usare sed
per estrarre la voce, ma non so davvero come farlo esattamente. Qualcuno può dirmi come avrei raggiunto questo obiettivo?
Probabilmente dovrebbe essere qualcosa del genere
sed -n "/AuthorYear/,/\}/p" file.bib
Ma ciò si interrompe a causa della chiusura }
nel primo elemento della voce dando così questo output:
@ARTICLE{AuthorYear,
item = {...},
Quindi ho bisogno di riconoscere se }
è l'unico carattere in una riga e avere 'sed' smettere di leggere solo quando questo è il caso.
sed
non è affatto necessario, ho solo pensato che sarebbe stata l'opzione più semplice. Ho capito un codice leggermente diverso: sed -n "/AuthorYear/, /^ *\}/p"
che sembra fare esattamente quello che voglio, inclusa la chiusura }
e la correzione degli spazi se ce ne sono
sed -n "/AuthorYear/,/\}$/p"
. Nota il$
simbolo. Funziona bene, tranne per il fatto che non stampa la chiusura}
di un bibitem. A proposito, èsed
necessario l'uso di ?