2017-10-11 82 views
0

最好描述一個例子。我有一個乳膠源文件(這是一個普通的文本文件),有很多本地字符的$封閉內嵌式,像這樣:用括號替換匹配的字符對

bla bla bla $E = mc^2$ bla blah 

我想更換的匹配對的每個ocurrence通過\(... \)文件中$字符,像這樣:

bla bla bla \(E = mc^2\) bla blah 

要做到這一點,儘可能簡單,你知道嗎?我不確定grep能夠處理這個問題。

假設該文件具有,甚至$的出現次數。在這種情況下,我們所要做的就是用\(代替奇數位置的$,用\)代替$

回答

0

是否這樣?

spacewrench$ cat foo 
bla bla bla $E = mc^2$ bla blah 
spacewrench$ sed -e 's/\$\(.*\)\$/\\(\1\\)/g' < foo 
bla bla bla \(E = mc^2\) bla blah 

sed可以做到這一點。如果您的表達式覆蓋多行,則可能需要使用反斜槓的數量,以及行尾。

.*表達式是貪婪的,所以它可能只放一對括號圍繞多個$一行...您可以修復,通過與[^\$]*更換.*

+0

這不會取代_matching_對,因爲無法判斷是否有給定的'$'應該關閉前一個'$'或打開一個新的(嵌套的)對。例如,考慮'$ a + $ b * c $ $'。那應該是'(a +)b * c()'還是'(a +(b * c))? (是的,我知道一個比另一個更有意義,但是'sed'不是那麼聰明。) –

+0

我不認爲膠乳也是那麼聰明。 '$'是一個切換,afaik;嵌套是不可能的。 ('\ $',另一方面...) – rici