2012-09-23 75 views
0

我在我的輸入中有幾行代碼,用於初始化結構。每次我在輸入文件中看到如下行:sed的字符串轉換

something1 =(struct something2){something3,something4};

我需要將其轉換爲:

init_something2(& something1,something3,something4);

我用下面的函數,它的工作原理。

sed -e 's/\([a-zA-Z0-9]*\)\s*=\s*(\s*struct\s\([a-zA-Z0-9]*\)\s*)\s*{\s*\([a-zA-Z0-9]*\)\s*,\s*\([a-zA-Z0-9]*\)\s*}\s*;/init_\2(\&\1, \3, \4);/g' 

我的問題是如何修改它,因此它將適用於任何輸入。 你可以修改它來做任何數量的輸入。例如像:

something = (struct something2) {something3, something4, something5, something6..}; 

應該成爲

init_something2(&something1, something3, something4, something5, something6..); 

(注意paranthesis VS括號) 非常感謝!

回答

1

當然。只需使用([^}]*)}即可捕獲大括號之前的所有內容,例如

sed -e 's/\([a-zA-Z0-9]*\)\s*=\s*(\s*struct\s\([a-zA-Z0-9]*\)\s*)\s*{\([^}]*\)}\s*;/init_\2(\&\1, \3);/g'