
Estou ciente sed
de que há uma maneira de fazer isso, mas não consigo fazê-lo funcionar. Eu tenho um arquivo Latex que contém expressões matemáticas destacadas com $
. Eu gostaria de converter isso em código MathJax. Isso simplesmente requer que as instâncias ímpares de a $
sejam substituídas \(
e as instâncias pares de $
sejam substituídas por \)
. Então
Here is Einstein's equation $E=mc^2$ and here is Newton's law $F=ma$
Deve se tornar
Here is Einstein's equation \(E=mc^2\) and here is Newton's law \(F=ma\)
Observe que ocorrências consecutivas de $
estão na mesma linha, mas pode haver mais de uma linha. Quero que a substituição aconteça em todo o arquivo. Qualquer ajuda é muito apreciada.
Responder1
Utilize o GNU sed
:
sed -Ez 's/\$([^$]*)\$/\\(\1\\)/g'
O mesmo sem -E
:
sed -z 's/\$\([^$]*\)\$/\\(\1\\)/g'
Isso -z
faz com que o GNU sed
absorva toda a entrada como uma única linha. Esta é uma extensão da sed
funcionalidade padrão.
Responder2
Substitua cada um $
que seja imediatamente precedido por um limite de palavra por \(
e cada $
um que seja imediatamente seguido por um limite de palavra por \)
:
sed -e 's/\$\</\\(/g' -e 's/\>\$/\\)/g' file
Os usuários GNU sed
podem usar \<
e \>
para limites de palavras, mas também podem usar \b
em vez disso. Os usuários do BSD podem usar \<
o and \>
conforme mostrado, mas poderiam usar [[:<:]]
o and [[:>:]]
, se quisessem (usuários do macOS com seuspadrão sed
teria que usar [[:<:]]
e [[:>:]]
).