0

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

某事1 =(结构某事2){某事3,某事4};

我需要将其转换为:

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..);

(注意括号与大括号)非常感谢!

4

1 回答 1

1

Sure. Just use ([^}]*)} to capture everything before the brace, e.g.

sed -e 's/\([a-zA-Z0-9]*\)\s*=\s*(\s*struct\s\([a-zA-Z0-9]*\)\s*)\s*{\([^}]*\)}\s*;/init_\2( \&\1, \3);/g'
于 2012-09-23T00:48:12.270 回答