用不同的字串替換字串的偶數和奇數重複

用不同的字串替換字串的偶數和奇數重複

我知道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 用戶可以使用\<和 ,\>如圖所示,但也可以使用[[:<:]][[:>:]],如果他們願意的話(macOS 用戶及其預設 sed必須使用[[:<:]][[:>:]])。

相關內容