Вы можете использовать grep -o
и постобработать его вывод:
grep -o '\\cite{[^{}]*}' file.tex |
sed 's/\\cite{\([^{}]*\)}/\1/'
Если в строке ввода может быть только один \cite
, достаточно только сценария sed
.
sed -n 's/.*\\cite{\([^{}]*\)}.*/\1/p' file.tex
(отнюдь не невозможно преобразовать это в скрипт, который извлекает несколько вхождений в каждой строке; но удачи в понимании вашего кода через шесть недель.)
Как обычно, добавьте sort -u
чтобы удалить любые повторы.
Вот краткая попытка Awk:
awk -v RS='\' '/^cite\{/ {
split($0, g, /[{}]/)
cite[g[2]]++ }
END { for (cit in cite) print cit }' file.tex
Это удобно не печатать дубликаты и тривиально обрабатывает несколько ссылок на строку.