2016-03-21 15 views
-1

ich das Makro __P() in Dutzend C-Quelldateien entfernen möchten, zB:Regex __P() Makro von C-Quelldateien entfernen

char *x __P((char *, size_t, 
     void *, size_t, int)); 
char *y __P((void *, const char *, int)); 

Ich möchte einen regulären Ausdruck verwenden, zu erhalten das folgende:

char *x(char *, size_t, 
     void *, size_t, int); 
char *y(void *, const char *, int); 

Mein Problem ist, dass die Funktionsdeklarationen eine neue Zeile enthalten können, und ich mag die unnötigen Klammern entfernen.

Hat jemand eine Lösung für mein Problem?

Antwort

0

Regex:(.*?)__P\((.*?)\);

Flags zu verwenden:

  • g für die globale Suche.

  • s, um Punkt Übereinstimmung Newline zu ermöglichen.

Ersatz zu tun:\1\2;

Sed Befehl:sed 's/(.*?)__P\((.*?)\);/\1\2;/gs' file.c

Regex101 Demo

+0

Vielen Dank für die Regex! Ich wusste nicht über 's'. Leider funktioniert es nicht in der Kommandozeile: 'sed: -e Ausdruck # 1, Char 29: unbekannte Option zu' s'' –

+0

@ JörgKrause: Bin froh, dass es geklappt hat. –

0

Es sed scheint s als Muster nicht versteht fl ag, aber perl tut:

perl -0777 -p -i -e 's/(.*?) __P\((.*?)\);/\1\2;/gs' file.c 

Trotzdem, vielen Dank an Noob für die richtige Regex!