Busque patrones en varios archivos y reemplace una subparte en todas las apariciones

Busque patrones en varios archivos y reemplace una subparte en todas las apariciones

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 \citecon\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 \citesi 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 -iopció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.

información relacionada