使用regex和sed命令替换'*';C+中的指针+;代码不起作用 我是一个新手程序员,我要复习和研究C++代码。我的一项基本任务是更改指针通知,如下所示: char *name; find ./ -type f -exec sed -i -e 's/(?<=\w)\s\*(?!\s)/\* /g' {} \; (char *) another_name

使用regex和sed命令替换'*';C+中的指针+;代码不起作用 我是一个新手程序员,我要复习和研究C++代码。我的一项基本任务是更改指针通知,如下所示: char *name; find ./ -type f -exec sed -i -e 's/(?<=\w)\s\*(?!\s)/\* /g' {} \; (char *) another_name,c++,regex,ubuntu,sed,C++,Regex,Ubuntu,Sed,根据本公约: char* name; 由于我的操作系统是Ubuntu13.10,我认为regex可以完成这项工作。我研究了一下,尝试了不同的命令变体,如下所示: char *name; find ./ -type f -exec sed -i -e 's/(?<=\w)\s\*(?!\s)/\* /g' {} \; (char *) another_name 进入这个 (char*) another_name 使用此命令行: find ./ -type f -exec sed -

根据本公约:

char* name;
由于我的操作系统是Ubuntu13.10,我认为regex可以完成这项工作。我研究了一下,尝试了不同的命令变体,如下所示:

char *name;
find ./ -type f -exec sed -i -e 's/(?<=\w)\s\*(?!\s)/\* /g' {} \;
(char *) another_name
进入这个

(char*) another_name
使用此命令行:

find ./ -type f -exec sed -i -e 's/(?<=\w)\s\*(?=\))/\*/g' {} \;
find./-type f-exec sed-i-e的/(?不支持查找断言,请启用
-r
标志并使用扩展正则表达式:

sed -i -r 's/(\w+)\s*\*(\w)/\1\* \2/g'

在Perl中,可以使用lookaround断言:

perl -i -pe 's/(?<=\w)\s*\*(?=\w)/\* /g'
perl-i-pe的/(?不支持环顾断言,请启用
-r
标志并使用扩展正则表达式:

sed -i -r 's/(\w+)\s*\*(\w)/\1\* \2/g'

在Perl中,可以使用lookaround断言:

perl -i -pe 's/(?<=\w)\s*\*(?=\w)/\* /g'
<代码> Perl—I—PE '/[()一个处理C++代码的新手程序员可能不应该自动化这个。你有没有想过使用<代码> */code >乘法< /p>?
name * another_name
还是取消引用

Type t = *it;

你似乎认为C++在内部的括弧内活生生地提交

(char*) name
实际上,它们通常出现在角形的内部

static_cast<char*>(name)
static\u cast(名称)
等等

<>你最好还是一手一手地做这个,以更好地了解你正在处理的事情。

< P>一个新手程序员处理C++代码可能不应该是自动化的。你有没有想过使用<代码> */code >用于乘法< /p>?
name * another_name
还是取消引用

Type t = *it;

你似乎认为C++在内部的括弧内活生生地提交

(char*) name
实际上,它们通常出现在角形的内部

static_cast<char*>(name)
static\u cast(名称)
等等



为了更好地了解您正在处理的问题,您最好手动执行此操作。

sed是否支持lookaheads/lookbehinds?(我认为答案是否定的)如果您使用的是eclipse,您也可以使用代码格式化程序来实现这个结果。您可以使用
-E
参数来支持扩展正则表达式。@Velthune-我会检查代码格式化程序,也许是最安全的方法sed支持lookaheads/lookbehinds?(我想答案是否定的)如果您使用的是eclipse,您也可以使用代码格式化程序来实现结果。.您可以使用
-E
参数来支持扩展正则表达式。@Velthune-我将检查代码格式化程序,也许是最安全的方法,如果在
*
之前出现一个简单的左侧空白应该被删除,那么对于您提到的这些情况,这真的很重要吗?@πάνταῥεῖ 这个练习的全部要点似乎是关于代码美化,所以假设,是的,这真的很重要。使用正则表达式查找候选项,然后验证编辑,可能仍然有用,但我发现对有经验的程序员(我)来说,自动更改代码是有风险的.我理解你的观点,这是绝对正确的,但是手工操作会花费大量的时间。也许我应该使用Eclipse工具来安全地处理它。如果在
*
之前出现一个简单的左侧空白应该被删除,这对你提到的这些情况真的有关系吗?@πάνταῥεῖ 这个练习的全部要点似乎是关于代码美化,所以假设,是的,这真的很重要。使用正则表达式查找候选项,然后验证编辑,可能仍然有用,但我发现对有经验的程序员(我)来说,自动更改代码是有风险的。我理解你的观点,这是绝对正确的,但是手工操作会花费大量时间。也许我应该使用Eclipse工具来安全地处理它。我不知道sed命令会出现这种异常。顺便说一句,当遇到类似这样的注释时,你的建议可能会得到错误的匹配:/**诸如此类**/这就是原因为什么是前瞻/落后要求…感谢更新,它仍然与此行匹配:/*这是一条注释*/这将取消注释sentence@hwnd这是更好的工作,以及它背后的机制(反向参考)我认为这是一个可以接受的回答问题-仍然记住安全编程应该避免像ReGEX这样的侵入性命令。因此,我积极地表示了您的善意帮助。对于感兴趣的任何人,即使Eclipse也遇到同样的问题。(即使for sed是一种特性,为了不丢失它的流编辑器身份,根据这一点:-再次感谢hwnd)。事实上,这是相关的Eclipse bug跟踪器,仍然没有实现:我不知道sed命令的异常情况。顺便说一句,当遇到类似这样的评论时,您的建议可能会得到错误的匹配:/**blah blah blah**/这就是前瞻/落后要求的原因…感谢更新,它仍然与这一行匹配:/*这是一条注释*/将取消注释sentence@hwnd这是更好的工作,以及它背后的机制(反向参考)我认为这是一个可以接受的回答问题-仍然记住安全编程应该避免像ReGEX这样的侵入性命令。因此,我积极地表示了您的善意帮助。对于感兴趣的任何人,即使Eclipse也遇到同样的问题。(即使for sed是一个特性,为了不丢失它的流编辑器身份,根据这一点:-再次感谢hwnd)。事实上,这是相关的Eclipse bug跟踪器,仍然没有实现: