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 ARTICLEpotrebbe 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 sedper 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.
sednon è 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, èsednecessario l'uso di ?