2013-03-26 31 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