我想删除十几个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);
我的问题是函数声明可能包含换行符,我想删除不必要的大括号。
有没有人能解决我的问题?
答案 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正确的正则表达式!