Estou ajudando uma amiga com sua tese escrita em LaTeX e preciso de uma solução rápida para "pesquisar e substituir". Usando um terminal no Linux, como posso encontrar o seguinte padrão:
\caption{*\cite{*}}
e substitua \cite
por\protect\cite
Eu estava usando Kate. Usando seu recurso de pesquisa, encontrei inicialmente mais de 2.000 resultados e, ao refinar minha pesquisa, reduzi-a para cerca de 300 resultados. No entanto, preciso restringir ainda mais porque não quero substituir todos \cite
. Eu só quero substituir \cite
se isso ocorrer dentro\caption{}
Responder1
Supondo que o texto da legenda e da citação não contenha caracteres especiais (em particular, o primeiro *
no seu exemplo não deve conter \
e o segundo *
não deve conter }
), então um GNU sed regex
s:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:g
deveria funcionar, eu acho. Se pode havervaziostrings de legenda e/ou citação, você pode querer alterar os +
modificadores para *
. Você pode testá-lo sem modificar o(s) arquivo(s) usando
sed -nr 's:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:gp' files
Se isso parece encontrar e modificar as instâncias corretas, você pode modificar os arquivos no local usando a -i
opção - se ainda não estiver trabalhando em cópias separadas, você pode fazer backups automaticamente
sed -i.bak -r 's:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:g' files
Expressões semelhantes são possíveis em perl se sed não funcionar para você. Outras versões do sed devem funcionar, mas podem precisar de escape diferente dos caracteres especiais.