2017-10-11 37 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