
Ich weiß, sed
dass 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 -z
wird GNU dazu veranlasst, sed
die 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 sed
verwenden , 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 sed
müsste [[:<:]]
und verwenden [[:>:]]
).