2016-03-21 4 views
-1

私はCのソースファイルのダースで使用されるマクロ__P()、などを削除するCソースファイルから__P()マクロを削除するには正規表現は

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

私の問題は、関数の宣言に改行が含まれている可能性があり、不要な中括弧を削除したいということです。

誰かが私の問題の解決策を持っていますか?

答えて

0

正規表現:使用する(.*?)__P\((.*?)\);

フラグ:グローバル検索のための

  • g

  • ドットマッチング改行を許可する。

行うに交換:\1\2;

sedコマンド:sed 's/(.*?)__P\((.*?)\);/\1\2;/gs' file.c

Regex101 Demo

+0

正規表現のおかげで多くの!私は 's'について知らなかった。不幸にも、コマンドラインでは機能しません。 'sed:-e式#1、char 29:' s''に未知のオプション –

+0

@JörgKrause:うまくいきました。 –

0

sedのパターンFLとしてsを理解していないようですしかし、perlは:

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

しかし、多くの正直な正規表現のためのnoobに感謝!