Mam duży plik bibtex z wieloma wpisami, z których każdy ma ogólną strukturę
@ARTICLE{AuthorYear,
item = {...},
item = {...},
item = {...},
etc
}
(w niektórych przypadkach ARTICLE
może to być inne słowo np. BOOK
)
Chciałbym napisać prosty skrypt (najlepiej skrypt powłoki), aby wyodrębnić wpisy o podanym AuthorYear i umieścić je w nowym pliku .bib.
Mogę sobie wyobrazić, że potrafię rozpoznać pierwsze zdanie wpisu AutorYeara i ostatnie po pojedynczym zamknięciu }
i być może użyć go sed
do wyodrębnienia wpisu, ale tak naprawdę nie wiem, jak to zrobić dokładnie. Czy ktoś może mi powiedzieć, jak to osiągnę?
Prawdopodobnie powinno to być coś w rodzaju
sed -n "/AuthorYear/,/\}/p" file.bib
Ale to zatrzymuje się z powodu zamknięcia }
w pierwszym elemencie wpisu, co daje ten wynik:
@ARTICLE{AuthorYear,
item = {...},
Muszę więc rozpoznać, czy }
jest to jedyny znak w wierszu i czy „sed” przestaje czytać, gdy tak jest.
sed
wcale nie jest konieczne, pomyślałem, że będzie to najłatwiejsza opcja. Wymyśliłem nieco inny kod: sed -n "/AuthorYear/, /^ *\}/p"
który wydaje się robić dokładnie to, co chcę, w tym zamykanie }
i korygowanie spacji, jeśli takie istnieją
sed -n "/AuthorYear/,/\}$/p"
. Zwróć uwagę na$
symbol. Działa dobrze, z tym wyjątkiem, że nie drukuje zamknięcia}
bibitemu. Btw, czy użycie jestsed
konieczne?