Tôi có một tệp bibtex lớn với nhiều mục trong đó mỗi mục có cấu trúc chung
@ARTICLE{AuthorYear,
item = {...},
item = {...},
item = {...},
etc
}
(trong một số trường hợp ARTICLE
có thể là một từ khác nhau, vd BOOK
)
Những gì tôi muốn làm là viết một tập lệnh đơn giản (tốt nhất chỉ là tập lệnh shell) để trích xuất các mục với AuthorYear đã cho và đặt chúng vào tập tin .bib mới.
Tôi có thể tưởng tượng rằng tôi có thể nhận ra câu đầu tiên của một mục nhập bởi AuthorYear và câu cuối cùng bằng cách đóng một lần duy nhất }
và có thể sử dụng sed
để trích xuất mục đó, nhưng tôi thực sự không biết làm thế nào để thực hiện điều này một cách chính xác. Ai đó có thể cho tôi biết làm thế nào tôi sẽ đạt được điều này?
Nó có lẽ nên là một cái gì đó như
sed -n "/AuthorYear/,/\}/p" file.bib
Nhưng điều đó dừng lại do việc đóng }
trong mục đầu tiên của mục nhập, do đó cho đầu ra này:
@ARTICLE{AuthorYear,
item = {...},
Vì vậy, tôi cần phải nhận ra liệu đó có phải }
là ký tự duy nhất trong một dòng hay không và chỉ có 'sed' ngừng đọc khi gặp trường hợp này.
sed
không cần thiết chút nào, tôi chỉ nghĩ đó sẽ là lựa chọn dễ nhất. Tôi đã tìm ra một mã hơi khác: sed -n "/AuthorYear/, /^ *\}/p"
dường như thực hiện chính xác những gì tôi muốn, bao gồm cả việc đóng }
và sửa lỗi cho khoảng trắng nếu có bất kỳ
sed -n "/AuthorYear/,/\}$/p"
. Lưu ý$
ký hiệu. Nó hoạt động tốt, ngoại trừ việc nó không in kết thúc}
một bibitem. Btw, là sử dụngsed
cần thiết?