Substitua recorrências pares e ímpares de string por strings diferentes

Substitua recorrências pares e ímpares de string por strings diferentes

Estou ciente sedde 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 -zfaz com que o GNU sedabsorva toda a entrada como uma única linha. Esta é uma extensão da sedfuncionalidade 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 sedpodem usar \<e \>para limites de palavras, mas também podem usar \bem 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 sedteria que usar [[:<:]]e [[:>:]]).

informação relacionada