Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式从C源文件中删除_P()宏_Regex_Sed - Fatal编程技术网

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

Regex 正则表达式从C源文件中删除_P()宏,regex,sed,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); 我的问题是函数声明可能包含换

我想删除十几个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);
我的问题是函数声明可能包含换行符,我想删除不必要的大括号


有人能解决我的问题吗?

正则表达式:
(.*)p\(.*)

要使用的标志:

  • g
    用于全局搜索

  • s
    以允许点匹配换行符

替换操作:
\1\2

Sed命令:
Sed的/(.*)p\(.*)/\1\2;/gs的文件.c


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

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

不过,非常感谢noob提供了正确的正则表达式

非常感谢你的regex!我不知道
s
。不幸的是,它在命令行中不起作用:
sed:-e expression#1,char 29:unknown选项到
s'`