文字列の偶数と奇数の繰り返しを別の文字列に置き換える

文字列の偶数と奇数の繰り返しを別の文字列に置き換える

これを行う方法があることは知っていますsedが、うまくいきません。 で強調表示された数式を含む LaTeX ファイルがあります$。これを MathJax コードに変換したいと思います。これには、 の奇数インスタンス$を に置き換え\(、 の偶数インスタンス$を に置き換えるだけです\)

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

なるべきです

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

連続して出現する は$同じ行にありますが、複数行になる場合もあります。ファイル全体で置換を実行したいです。ご協力いただければ幸いです。

答え1

GNU を使用するsed:

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

以下なしでも同様-E:

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

GNU-zsed入力全体を 1 行として読み込みます。これは標準機能の拡張ですsed

答え2

$単語境界の直前にある各 を に置き換え\($単語境界の直後にある各 を に置き換えます\)

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

GNUユーザーは単語の境界にと をsed使用できますが、代わりに を使用することもできます。BSDユーザーは示されているようにと を使用できますが、必要に応じてと を使用することもできます(macOSユーザーは\<\>\b\<\>[[:<:]][[:>:]]デフォルト sed[[:<:]]および を使用する必要があります[[:>:]]

関連情報