我有一个头文件(.h),其中包含C中结构的定义。
有些定义如下:
typedef struct {
...
...
...
} structure1
有些定义如下:
typedef struct structure2 {
...
...
...
} structure2
和一些命令结构定义: 有些定义如下:
//typedef struct {
// ...
// ...
// ...
//} structure1
如何使用egrep或更多unix命令查找头文件中的所有结构并打印所有结构名称?
感谢名单。
答案 0 :(得分:0)
使用perl
非常容易:
perl -e 'local $/; $_ = <>; print $1."------\n" while (/(typedef struct {.*?}.*?\n)/msg);'
示例:
$ cat /tmp/1.txt
typedef struct {
...
...
...
} structure1
hello
typedef struct {
...
...
...
} structure2
bye
$ cat /tmp/1.txt | perl -e 'local $/; $_ = <>; print $1."------\n" while (/(typedef struct {.*?}.*?\n)/msg);'
typedef struct {
...
...
...
} structure1
------
typedef struct {
...
...
...
} structure2
------
以---------
分隔的成立区块。
如果您只想获取结构的名称,则必须将正则表达式的另一部分分组(使用()
对所需的部分进行分组):
$ cat /tmp/1.txt | perl -e 'local $/; $_ = <>; print $1."\n" while (/typedef struct {.*?}\s*(.*?)\n/msg);'
structure1
structure2
如您所见,我稍微修改了正则表达式:
/typedef struct {.*?}\s*(.*?)\n/
}
之后的字符串部分将被捕获到组$1
中。