
我知道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
必須使用[[:<:]]
和[[:>:]]
)。