Saya memiliki file bibtex besar dengan banyak entri di mana setiap entri memiliki struktur umum
@ARTICLE{AuthorYear,
item = {...},
item = {...},
item = {...},
etc
}
(dalam beberapa kasus ARTICLE
mungkin kata yang berbeda misalnya BOOK
)
Yang ingin saya lakukan adalah menulis skrip sederhana (sebaiknya hanya skrip shell) untuk mengekstraksi entri dengan AuthorYear yang diberikan dan meletakkannya di file .bib baru.
Saya dapat membayangkan bahwa saya dapat mengenali kalimat pertama dari sebuah entri oleh AuthorYear dan yang terakhir dengan satu penutup }
dan mungkin digunakan sed
untuk mengekstrak entri tersebut, tetapi saya tidak benar-benar tahu bagaimana melakukan ini secara tepat. Dapatkah seseorang memberi tahu saya bagaimana saya akan mencapai ini?
Mungkin harus seperti itu
sed -n "/AuthorYear/,/\}/p" file.bib
Tapi itu berhenti karena penutupan }
item pertama dari entri sehingga memberikan hasil ini:
@ARTICLE{AuthorYear,
item = {...},
Jadi saya perlu mengenali apakah }
ini satu-satunya karakter pada satu baris dan hanya memiliki 'sed' berhenti membaca ketika ini terjadi.
sumber
sed -n "/AuthorYear/,/\}$/p"
. Perhatikan$
simbolnya. Ini berfungsi dengan baik, kecuali bahwa itu tidak mencetak penutupan}
bibitem. Btw, apakahsed
perlu menggunakan ?sed
tidak perlu sama sekali, saya hanya berpikir itu akan menjadi pilihan termudah. Saya telah menemukan kodesed -n "/AuthorYear/, /^ *\}/p"
yang sedikit berbeda: yang tampaknya melakukan persis apa yang saya inginkan, termasuk menutup}
dan mengoreksi spasi jika adaJawaban:
Skrip Python berikut melakukan penyaringan yang diinginkan.
Secara pribadi, saya lebih suka pindah ke bahasa scripting ketika logika penyaringan menjadi kompleks. Itu, mungkin, memiliki keunggulan pada faktor keterbacaan setidaknya.
sumber
{}
s bersarang . Jika Anda dapat memastikan entri berakhir dengan\n}
, Anda dapat berhenti dengan^}
Saya akan merekomendasikan menggunakan bahasa dengan perpustakaan BibTeX yang telah teruji pertempuran alih-alih menciptakan kembali roda itu. Sebagai contoh
Anda mungkin harus menginstal modul:
cpan install BibTeX::Parser
sumber
Sekarang kita juga memiliki modul bibparsing Python, yang memungkinkan untuk menganalisis basis data BibTeX dengan Python. Misalnya saya menggunakan skrip berikut untuk menghitung jumlah penulis dalam makalah kolaboratif:
sumber
Pilihan lain adalah menggunakan bibtool.
Contoh:
Lihatlah manual untuk kasus-kasus tertentu.
sumber
Ini adalah skrip Bash yang membaca setiap baris dan menggunakan pencocokan regex untuk mengekstrak setiap entri yang memiliki pola yang diperlukan di kepalanya. Anda dapat menyebutnya
getbibs
atau sesuatu:Untuk mengekstrak semua entri dengan tahun penulis 1989 Anda dapat melakukan:
Mungkin ada beberapa masalah yang belum saya uji, tetapi tampaknya berfungsi baik untuk tugas itu.
sumber
Supaya lengkap, cara saya menemukan diri sendiri, tidak sebagus beberapa yang lain, tetapi berhasil:
Itu bisa dijalankan dari commandline atau dimasukkan ke dalam skrip bash.
sumber