Найти / заменить текстовую строку, содержащую символ '*', cscope

Программа cscope позволяет находить / заменять текст в полном C-коде, распространяемом во многих файлах, и легко перемещаться по исходному коду. Кто-нибудь знает, как искать и заменять шаблоны, содержащие символ "*", с помощью cscope?

Всякий раз, когда я ищу строку, содержащую "*", я всегда получаю сообщение об ошибке "Не удалось найти текстовую строку: *ptr" (здесь я искал "* ptr", который существует в коде).

Согласно исходному коду cscope (я использую версию 15.7a), "findstring" будет просто экранировать символы ". * [ \ ^ $ +? | () 'с'\'и затем ищите шаблон egrep ('find.c' @ line 474).

Использование непосредственного egrep для данного файла и экранирование "*" с помощью "\" работает. Использование cscope для поиска шаблона egrep вместо строки также не работает.

2 ответа

Решение

Вы случайно выбрали ошибочную версию cscope. Сообщалось, что он не работает в версии 15.8a, но работает в версии 15.5, поэтому сломался где-то посередине. Это было исправлено снова и работает, как и ожидалось, в 15.8b.

Больше подробностей в #87, специальный символ, убегающий, сломанный в 15,8 в egrep

Вы тестируете с помощью egrep утилита командной строки, но это не то, что используется cscope. cscope использует пользовательскую реализацию регулярных выражений, см. src/egrep.y, Ошибка была там.

Вы всегда можете использовать старый трюк для помещения "магических персонажей" в класс персонажей ([...]) сопоставлять их как буквальные символы.

использование [*] найти буквальный символ звездочки.

Другие вопросы по тегам