Reemplazar recurrencias pares e impares de cadenas con cadenas diferentes

Reemplazar recurrencias pares e impares de cadenas con cadenas diferentes

sedque hay una forma de hacer esto, pero no puedo hacer que funcione. Tengo un archivo Latex que contiene expresiones matemáticas resaltadas con $. Me gustaría convertir esto en código MathJax. Esto simplemente requiere que las instancias impares de a $sean reemplazadas por \(y las instancias pares de $por \). Entonces

Here is Einstein's equation $E=mc^2$ and here is Newton's law $F=ma$

debe convertirse

Here is Einstein's equation \(E=mc^2\) and here is Newton's law \(F=ma\)

Tenga en cuenta que las apariciones consecutivas de $están en la misma línea, pero puede haber más de una línea. Quiero que el reemplazo se realice en todo el archivo. Cualquier ayuda es muy apreciada.

Respuesta1

Utilice GNU sed:

sed -Ez 's/\$([^$]*)\$/\\(\1\\)/g'

Lo mismo sin -E:

sed -z 's/\$\([^$]*\)\$/\\(\1\\)/g'

Esto -zhace que GNU sedabsorba toda la entrada como una sola línea. Esta es una extensión de la sedfuncionalidad estándar.

Respuesta2

Reemplace cada uno $que esté inmediatamente precedido por un límite de palabra por \(y cada uno $que esté inmediatamente seguido por un límite de palabra por \):

sed -e 's/\$\</\\(/g' -e 's/\>\$/\\)/g' file

Los usuarios de GNU sedpueden usar \<y \>para los límites de palabras, pero también pueden usar \ben su lugar. Los usuarios de BSD pueden usar \<y \>como se muestra, pero podrían usar [[:<:]]y [[:>:]], si quisieran (los usuarios de macOS con supor defecto sedTendría que usar [[:<:]]y [[:>:]]).

información relacionada