ожидается целочисленное выражение

Поскольку вы отметили это с помощью и изначально спрашивали о vi, я объясню, почему это не работает в vi для вас , и как это исправить. Вы сказали, что изначально пытались:

%s/ab*/ab001/g

Метод * работает в поиске, путем сопоставления предыдущего атома 0 или более раз, насколько это возможно. Из : h / * :

                            */star* */\star*
*   (use \* when 'magic' is not set)
    Matches 0 or more of the preceding atom, as many as possible.

В этом случае предыдущий атом - 'b', поэтому этот поиск будет соответствовать любому из этих:

a
ab
abbb
abbbbbbbbbbbbbbbbbbb

Он также будет соответствовать ab001 , но соответствует только его первой части, поэтому совпадение будет (ab) 001 . Vi видит, что вы искали это, и заменяет его на (ab001) 001 . Решение простое. Вы хотите сопоставить

'ab', за которым следует что-нибудь

. Точка (. ) будет соответствовать любому символу, кроме символа новой строки. Таким образом, если вы ищете

/ab.*/

, он будет соответствовать всему , начинающемуся с 'ab'. Итак, вы хотите:

:%s/ab.*/ab001/g

Если это слишком много совпадений (например, таких слов, как «абсолютно»), вы можете упростить это, чтобы искать только цифры. Например, это будет соответствовать 'ab', за которым следует любое количество цифр:

/ab\d*/

, и это будет соответствовать 'ab', за которым следуют ровно три цифры:

/ab\d\{3}/

Я бы рекомендовал добавить в закладки эту страницу для быстрого Ссылка на vi-regex. Я обнаружил, что это чрезвычайно ценно для устранения неполадок с некоторыми регулярными выражениями.

2
22.04.2016, 20:16
0 ответов

Теги

Похожие вопросы