Найти / заменить текстовую строку, содержащую символ '*', 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
, Ошибка была там.
Вы всегда можете использовать старый трюк для помещения "магических персонажей" в класс персонажей ([...]
) сопоставлять их как буквальные символы.
использование [*]
найти буквальный символ звездочки.