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

发布于 2024-12-09 08:01:40 字数 759 浏览 0 评论 0原文

已经尝试过这个问题,检测并连接使用 sed 的多行结构,但没有一个答案适用于我的具体情况。

我有一个用 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 查找结构,然后使用分支语句将结构定义的其余行附加到单行。

There has been an attempt at this question already, Detecting and concatenating a multi-line structure using sed, but none of the answers worked for my specific case.

I have a program written in c which has two kinds of multi-lined structures. I need to figure out how to use the unix utility sed to compress these structure definitions to a single line and then make two copies, so there are three copies of the structure definition in total.

Here is my c program example:

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

I know that the sed command will look something to the extent of sed '/ *struct .*/N;' test.c to find the structure and then a branch statement to append the rest of the lines of the structure definition to the single line.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

む无字情书 2024-12-16 08:01:40

以下是具体操作方法。有一个调用 sed -f 的文件,然后创建一个包含 sed 命令列表的文件。该文件如下。

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

Here's how to do it. Have a file which calls sed -f and then create a file with a list of sed commands. The file goes as follows.

/typedef struct/b a
/^struct.*{/!b;:a;N
/}/!b a;p
s/\n//g
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文