Find/replace 包含带有 cscope 的字符“*”的文本字符串

Find/replace text string containing the character '*' with cscope

cscope 程序允许 finding/replacing 完整 C 代码中的文本分布在许多文件中,并且可以轻松浏览源代码。有谁知道如何使用 cscope 搜索和替换包含字符“*”的模式?

每当我查找包含“*”的字符串时,我总是会收到错误消息 "Could not find the text string: *ptr"(此处我查找代码中确实存在的“*ptr”)。

根据 cscope 的源代码(我使用的是 15.7a 版本),"findstring" 只会转义字符 '. * [ \ ^ $ + ? | ( ) ' 和 '\' 然后搜索 egrep 模式('find.c' @ line 474)。

在给定文件上直接使用 egrep 并使用“\”转义“*”。使用 cscope 查找 egrep 模式而不是字符串也不起作用。

您碰巧选择了一个有问题的 cscope 版本。据报道,它在 15.8a 版中不起作用,但在 15.5 中起作用,因此在两者之间的某个地方中断了。它再次得到修复,并在 15.8b 中按预期工作。

更多详情请见 #87 special char escaping broken in 15.8 in egrep

您正在使用 egrep 命令行实用程序进行测试,但这不是 cscope 使用的。 cscope 正在使用自定义正则表达式实现,请参阅 src/egrep.y。错误就在那里。

您总是可以使用一个老技巧将 "magic characters" 放入字符 class ([...]) 中以将它们作为文字字符进行匹配。

使用 [*] 查找文字星号。