2011-10-09 96 views
2

考慮到我有這樣的事情:SED/grep的 - 篩選出內容

int val; struct node *mhm; 
int val; struct node *next; 

我想,讓他們閱讀,提取每行內容,使用SED,AWK,或者grep的:

init->val = val; init->mhm = mhm; 
init->val = val; init->next = next; 

的grep -o輸出在新的一行的每個個體的結果,但我需要保留線結構(各組變量是指一個單獨的東西)。

我使用GNU sed命令目前,但我只要輸出的替換字符串:

sed -re 's/([A-Za-z0-9_]*);/init->\1 = \1;/g' 

此以上sed命令輸出:

int init->val = val; struct node *init->mhm = mhm; 
int init->val = val; struct node *init->next = next; 
使用非貪婪改性劑即使

,我無法獲得完整的線性正則表達式來成功選擇每行中的每個變量名稱。除非你解析語言中的每一行

回答

1

這適用於您的樣本集(小的改動你的解決方案):

sed -re 's/[^;]* [*]?([A-Za-z0-9_]+) *;/init->\1 = \1; /g' 
0

有isin't一個變量名。

話雖這麼說,因爲只是隨機的文本,這一點:
s/([^\S\n]*)[^;\n]+?(\w+)\s*;/\1init->\2 = \2;/g
應該這樣做。

0

試試這個

awk '{for(i=1;i<=NF;i++) if($i~/;/){ gsub(/\*/,"",$i);a=gensub(/(\w*);/, "init->\\1 = \\1; ","g",$i);printf a;}print ""}' yourFile