2013-03-26 52 views
0

我正在编写一个bash脚本来生成CPP源文件。 我的变量和它的名称的列表中,这样的:多次替换一个句子

 
    TH1F z_E; 
    TH1F z_eta; 

我想在这样的转向:

 
    TH1F * z_E = (TH1F *)f->Get("z_E"); 
    TH2F * z_eta = (TH2F *)f->Get("z_eta"); 

我试图用sed做到这一点,但我不能” t找到一种方法来使用匹配的字符串来写入结果。

PS:我sed版本是4.1.5

任何想法?

回答

2

事情是这样的:

sed 's/\([A-Za-z_][A-Za-z0-9_]*\) *\([A-Za-z_][A-Za-z0-9_]*\);/\1 \2 = (\1 *)someOtherVar->Get("\2");/' input 
+0

所以\ 1 MATHES第一正则表达式? – RSFalcon7 2013-03-26 02:34:15

+1

它指的是第一个捕获组,即第一个'\(.. \)' – perreal 2013-03-26 02:35:29

+0

顺便包含的匹配,它的工作权限在“=” – RSFalcon7 2013-03-26 02:36:06

0

最终的解决方案(解决了@perreal回答小问题)是:

sed 's/\([A-Za-z_][A-Za-z0-9_]*\)[ \t]*\([A-Za-z_][A-Za-z0-9_]*\);/\1 \2 = (\1 *)f->Get("\2");/' input