我在输入中有几行我正在初始化结构。每当我在输入文件中看到类似以下行的内容时:
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 braces) 非常感谢!
答案 0 :(得分: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'