Сжатие определения структуры в одну строку и создание двух копий с помощью sed - PullRequest
0 голосов
/ 12 октября 2011

Уже была попытка ответить на этот вопрос, Обнаружение и объединение многострочной структуры с использованием 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, чтобы найти структуру, а затем оператор перехода, чтобы добавить остальные строки определения структуры к одной строке.

1 Ответ

0 голосов
/ 08 декабря 2011

Вот как это сделать. Есть файл, который вызывает sed -f, а затем создайте файл со списком команд sed. Файл выглядит следующим образом.

/typedef struct/b a
/^struct.*{/!b;:a;N
/}/!b a;p
s/\n//g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...