Sed / Grep - 过滤掉内容

时间:2011-10-09 14:49:30

标签: regex unix sed

鉴于我有这样的事情:

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;

即使使用非贪婪的修饰符,我也无法获得一个完整的正则表达式语句来成功选择每一行中的每个变量名。

3 个答案:

答案 0 :(得分:1)

这适用于您的样本集(对您的解决方案进行微小更改):

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

答案 1 :(得分:0)

除非您解析语言,否则每行中都没有变量名称。

话虽如此,只是随机文字,这: s/([^\S\n]*)[^;\n]+?(\w+)\s*;/\1init->\2 = \2;/g
应该这样做。

答案 2 :(得分:0)

试试这个

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