用不同的字符串替换字符串的偶数和奇数重复

用不同的字符串替换字符串的偶数和奇数重复

我知道sed有一种方法可以做到这一点,但我无法让它发挥作用。我有一个 Latex 文件,其中包含用$.我想将其转换为 MathJax 代码。这仅需要将 a 的奇数实例$替换为\(,并将 a 的偶数实例$替换为\)。所以

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'

-z使得 GNUsed将整个输入当作一行。这是标准功能的扩展sed

答案2

$将紧随其后的单词边界的每个替换为\(,将$紧随其后的单词边界的每个替换为\)

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

GNUsed用户可以使用\<and\>作为字边界,但也可以使用\b替代。 BSD 用户可以使用\<and\>如图所示,但也可以使用[[:<:]]and[[:>:]],如果他们愿意的话(macOS 用户及其默认 sed必须使用[[:<:]][[:>:]])。

相关内容