Ersetzen Sie gerade und ungerade Wiederholungen von Zeichenfolgen durch andere Zeichenfolgen

Ersetzen Sie gerade und ungerade Wiederholungen von Zeichenfolgen durch andere Zeichenfolgen

Ich weiß, seddass es eine Möglichkeit gibt, dies zu tun, aber ich bekomme es nicht zum Laufen. Ich habe eine Latex-Datei, die mathematische Ausdrücke enthält, die mit hervorgehoben sind $. Ich möchte diese in MathJax-Code umwandeln. Dazu müssen lediglich die ungeraden Instanzen von a $durch \(und die geraden Instanzen von $durch ersetzt werden \). Also

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

soll werden

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

Beachten Sie, dass aufeinanderfolgende Vorkommen von $in derselben Zeile stehen, es aber auch mehrere Zeilen geben kann. Ich möchte, dass der Ersatz in der gesamten Datei erfolgt. Für jede Hilfe bin ich sehr dankbar.

Antwort1

Verwenden Sie GNU sed:

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

Dasselbe ohne -E:

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

Dadurch -zwird GNU dazu veranlasst, seddie gesamte Eingabe als eine einzige Zeile zu slurpen. Dies ist eine Erweiterung der Standardfunktionalität sed.

Antwort2

Ersetzen Sie jedes $, dem unmittelbar eine Wortgrenze vorangeht, durch \(, und jedes $, dem unmittelbar eine Wortgrenze folgt, durch \):

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

GNU- Benutzer können und für Wortgrenzen sedverwenden , könnten aber stattdessen auch verwenden. BSD-Benutzer können und wie gezeigt verwenden, könnten aber auch und verwenden , wenn sie wollten (macOS-Benutzer mit ihrem\<\>\b\<\>[[:<:]][[:>:]]Standard sedmüsste [[:<:]]und verwenden [[:>:]]).

verwandte Informationen