парсинг файла c в bash (поиск содержимого основных скобок) - PullRequest
0 голосов
/ 28 января 2020
#include <stdio.h> 
int max(int x, int y);
int main(){ 
    int a = 10, b = 20; 
    int m = max(a, b); 

    printf("m is %d", m); 
    return 0; 
} 
int max(int x, int y) { 
    if (x > y) 
      return x; 
    else
      return y; 
}

У меня есть этот код, и я хочу разобрать, чтобы найти только основную функцию, такую ​​как:

{ 
    int a = 10, b = 20; 
    int m = max(a, b); 

    printf("m is %d", m); 
    return 0; 
}

Я пытался с помощью Sed, но я не могу сделать это

sed ':a;N;$!ba;s/\n/ /g' esempio.c>main.c # to remove new lines 
sed 's/.*\s*main(.*)\s*\({\s*.*\s*}\)/\1/' main.c # parsing 

1 Ответ

0 голосов
/ 29 января 2020

cat a.c | awk '/{/ {m=/main/ }m' | awk -vRS='{|}' NR%2-1

    int a = 10, b = 20;
    int m = max(a, b);

    printf("m is %d", m);
    return 0;

Первый awk извлечение основной функции. Второй awk извлекает код между {..} с помощью разделителя записей { or } и печатает четные строки.

...