Я помогаю другу с ее диссертацией, написанной в LaTeX, и мне нужно быстрое решение для "поиска и замены". Используя терминал в Linux, как мне найти следующий шаблон:
\caption{*\cite{*}}
и заменить \cite
на\protect\cite
Я использовал Kate. Используя его функцию поиска, я изначально нашел более 2000 совпадений, а уточнив свой поиск, я сузил его до 300 совпадений. Однако мне нужно сузить его еще больше, потому что я не хочу заменять все \cite
. Я хочу заменить только \cite
то, что встречается в пределах\caption{}
решение1
Предполагая, что подпись и текст цитаты не содержат специальных символов (в частности, первый *
в вашем примере не должен содержать \
, а второй *
не должен содержать }
), то регулярное выражение GNU sed
s:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:g
Я думаю, должно сработать. Если есть возможностьпустойстроки подписи и/или цитирования, вы можете изменить +
модификаторы на *
. Вы можете проверить это, не изменяя файл(ы), используя
sed -nr 's:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:gp' files
Если это позволяет найти и изменить нужные экземпляры, то вы можете изменить файлы на месте, используя опцию -i
- если вы еще не работаете с отдельными копиями, вы можете автоматически создавать резервные копии.
sed -i.bak -r 's:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:g' files
Подобные выражения возможны в perl, если sed у вас не работает. Другие версии sed должны работать, но могут потребовать другого экранирования специальных символов.