使用sed进行字符串转换

时间:2012-09-23 00:45:24

标签: shell unix

我在输入中有几行我正在初始化结构。每当我在输入文件中看到类似以下行的内容时:

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) 非常感谢!

1 个答案:

答案 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'