[英]Using regex and sed command to substitute ' *' pointers in C++ code is not working
我是一名新手程序员,负责处理我应该复习和研究的C ++代码。 我要执行的基本任务之一是更改指针通知,如下所示:
char *name;
按照这个惯例:
char* name;
由于我的操作系统是Ubuntu 13.10,因此我认为regex可以胜任。 我研究了一下,并尝试了类似以下命令的不同变体:
find ./ -type f -exec sed -i -e 's/(?<=\w)\s\*(?!\s)/\* /g' {} \;
可以理解为:在字符串中找到一个字母数字,然后与空格匹配,然后是星号,当匹配时是非空格,然后是星号和空格。 我知道不能使用替代\\ s,所以向前/向后看不会进入比赛,所以我在命令上打了一点点,但收效甚微。 我首先使用Eclipse IDE的“查找”菜单进行了尝试,正则表达式似乎可以正确构建,因为它确实可以找到我期望的东西。 但是,当我尝试执行该命令时,它并没有按预期方式更改行,实际上它们保持不变,没有被触碰。
我也在尝试上述情况的狭窄情况,即将强制类型更改为指针,如下所示:
(char *) another_name
进入这个
(char*) another_name
使用以下命令行:
find ./ -type f -exec sed -i -e 's/(?<=\w)\s\*(?=\))/\*/g' {} \;
但是正则表达式引擎似乎无法识别转义的括号,因为它给了我“ sed:-e表达式#1,char 25:Unmatched)或”)。
现在,我要敲打墙壁,试图找出解决该问题的正确方法:为什么替换未按预期工作,以及为什么在正向外观内使用istead和转义括号的同一命令无法识别?
预先感谢您的任何建议。
“处理C ++代码的新手程序员”可能不应该自动执行此操作。 您是否考虑过*
用于乘法的情况
name * another_name
还是取消引用?
Type t = *it;
您似乎认为C ++强制转换放在圆括号内
(char*) name
实际上,它们通常出现在角形内
static_cast<char*>(name)
等等 ...
您可能最好手动执行此操作,以更好地了解您正在处理的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.