C 将结构定义压缩为一行并使用sed制作两个副本

C 将结构定义压缩为一行并使用sed制作两个副本,c,unix,C,Unix,已经有人试图回答这个问题,但没有一个答案对我的具体案例有效 我有一个用c写的程序,它有两种多行结构。我需要弄清楚如何使用unix实用程序sed将这些结构定义压缩到一行,然后制作两个副本,因此总共有三个结构定义副本 下面是我的c程序示例: #include <stdio.h> #include <stdlib.h> struct node { int val; struct node *next; }; typedef struct { int

已经有人试图回答这个问题,但没有一个答案对我的具体案例有效

我有一个用c写的程序,它有两种多行结构。我需要弄清楚如何使用unix实用程序sed将这些结构定义压缩到一行,然后制作两个副本,因此总共有三个结构定义副本

下面是我的c程序示例:

#include <stdio.h>
#include <stdlib.h>

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 };

    return 0;
}

我知道sed命令看起来像sed'/*struct.*/N;'test.c查找结构,然后使用一条分支语句将结构定义的其余行追加到单行。

下面介绍如何执行此操作。创建一个调用sed-f的文件,然后创建一个包含sed命令列表的文件。文件如下所示

/typedef struct/b a
/^struct.*{/!b;:a;N
/}/!b a;p
s/\n//g

硬件部分检测结构何时结束;这是一个C解析问题,对于sed来说相当严重。你为什么要做这件可怕的事?这是个家庭作业问题。最终目标是让程序为c89编译,所以我必须更改结构声明。技术上没有,但我的教授告诉我们他的实现是用sed完成的。