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 ARTICLEmoż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 seddo 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.
sedwcale 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 jestsedkonieczne?