
Sé sed
que 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 -z
hace que GNU sed
absorba toda la entrada como una sola línea. Esta es una extensión de la sed
funcionalidad 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 sed
pueden usar \<
y \>
para los límites de palabras, pero también pueden usar \b
en 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 sed
Tendría que usar [[:<:]]
y [[:>:]]
).