Estoy ayudando a una amiga con su tesis escrita en LaTeX y necesito una solución rápida para "buscar y reemplazar". Usando una terminal en Linux, ¿cómo puedo encontrar el siguiente patrón?
\caption{*\cite{*}}
y reemplazar \cite
con\protect\cite
Estaba usando a Kate. Al utilizar su función de búsqueda, inicialmente encontré más de 2000 resultados y, al refinar mi búsqueda, la reduje a unos 300 resultados. Sin embargo, necesito reducirlo aún más porque no quiero reemplazarlo todo \cite
. Sólo quiero reemplazar \cite
si ocurre dentro\caption{}
Respuesta1
Suponiendo que el título y el texto de la cita no contienen caracteres especiales (en particular, el primero *
en su ejemplo no debe contener \
y el segundo *
no debe contener }
), entonces una expresión regular GNU sed
s:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:g
Debería funcionar, creo. Si puede habervacíocadenas de títulos y/o citas a las que es posible que desees cambiar los +
modificadores *
. Puede probarlo sin modificar los archivos usando
sed -nr 's:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:gp' files
Si eso parece encontrar y modificar las instancias correctas, entonces puede hacer que modifique los archivos en el lugar usando la -i
opción; si aún no está trabajando en copias separadas, puede hacer copias de seguridad automáticamente.
sed -i.bak -r 's:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:g' files
Son posibles expresiones similares en Perl si sed no funciona para usted. Otras versiones de sed deberían funcionar, pero es posible que necesiten un escape diferente de los caracteres especiales.