我在一个长c文件中有一个struct块
struct node {
int val;
struct node *next;
};
如何使用sed函数查找此结构块并将其转换为一行。所以它看起来像这样:
struct node { int val; struct node *next;};
提前致谢
我的意见是:
struct node {
int val;
struct node *next;
};
typedef struct {
int numer;
int denom;
} Rational;
int main()
{
struct node head;
Rational half, *newf = malloc(sizeof(Rational));
head = (struct node){ 5, NULL };
half = (Rational){ 1, 2 };
*newf = (Rational){ 2, 3 };
}
我的输出是:
struct node { int val; struct node *next;};
typedef struct { int numer; int denom;} Rational;int main(){struct node head;Rational half, *newf = malloc(sizeof(Rational));head = (struct node){ 5, NULL };
half = (Rational){ 1, 2 };
*newf = (Rational){ 2, 3 };
}
我只想要结构节点:struct node { int val; struct node *next;};
和typedef结构:typedef struct { int numer; int denom;} Rational;
在一条线上。但是,将main()附加到Rational的末尾;
我希望main函数中的东西保持不变。
答案 0 :(得分:3)
使用sed:
sed '/struct[^(){]*{/{:l N;s/\n//;/}[^}]*;/!t l;s/ */ /g}' input.c
当sed
看到结构定义(/struct[^{]*{/
)时,它会读取行,直到};
在一行(:l N;s/\n//;/[}];/!t l;
)上看到,同时删除换行符。当它与};
匹配时,会删除多余的空格(;s/ */ /g
)。