正则表达式从C源文件中删除__P()宏

时间:2016-03-21 23:15:33

标签: regex sed

我想删除十几个C源文件中使用的宏__P(),例如:

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

我想使用正则表达式来获得以下内容:

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

我的问题是函数声明可能包含换行符,我想删除不必要的大括号。

有没有人能解决我的问题?

2 个答案:

答案 0 :(得分:0)

正则表达式: (.*?)__P\((.*?)\);

要使用的标志:

  • g进行全球搜索。

  • s允许点匹配换行符。

替换为: \1\2;

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

Regex101 Demo

答案 1 :(得分:0)

似乎sed不理解s作为模式标志,但perl确实:

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

然而,非常感谢noob正确的正则表达式!