我想找到我的代码中参数不正确的所有字符串。这是我想做的:
查找所有出现的情况:
CreateNewPoint(CorrectPoint.X, IncorrectPoint.Y, other_parameters)
CreateNewPoint(IncorrectPoint.X, CorrectPoint.Y, other_parameters)
并忽略所有出现的情况:
CreateNewPoint(CorrectPoint.X, CorrectPoint.Y, other_parameters)
请注意,在我的示例中,我使用CorrectPoint
和IncorrectPoint
变量名称,但这些名称可以是任何名称。
我正在考虑这样的事情:
CreateNewPoint(\(.*\)\.X, \1\.Y, .*)
但我对使用相同变量名但不同变量名的行不感兴趣。
答案1
带有grep
和使用标志-P
(“解释PATTERN
为 Perl 正则表达式”), 您可以使用负前瞻。
grep -P 'CreateNewPoint\((.*)\.X, ((?!\b\1\b).)*\.Y, .*\)' /tmp/codefile
(?!\b\1\b)
意味着下一个事物不能是单词边界包围的先前匹配的单词(使用\b
,它可能会错过那些字符串)包括第一场比赛,但不是完全相同的到它。((?!\b\1\b).)*
- 因为您还想匹配\.Y, .*\)
之后的内容,所以我们需要告诉grep
它检查所有字符(并确保它们与单词不匹配),然后匹配\.Y
。
您vim
可以使用 进行类似的匹配/CreateNewPoint(\(.*\)\.X, \(\(\<\1\.\)\@!.\)*\.Y, .*)
。它与grep
正则表达式类似,但有一些例外:
\@!
是负前瞻标识符。\<
是单词的开头(而不是\b
单词边界)。- 我们只是说它不能以点结尾,而不是结尾处的单词边界
\.
。