1

Пробовал это с vim, но открыт для других идей / предложений.

Хотел бы выполнить поиск и заменить в файле 12000 строк.

В частности, если вхождение «^ SetFontSize 28» существует после определения «^ Hide» и перед следующим «^ Hide» или «^ Show», измените 28 на 18. Пример ниже.

Вот фрагмент оригинального файла.

Hide # Gear - Endgame
    ItemLevel >= 77
    Rarity = Magic
    LinkedSockets >= 3
    BaseType "Runic Hatchet"
    SetTextColor 140 190 255 # Magic Item Highlight
    SetFontSize 28

Hide # Gear - Endgame
    ItemLevel >= 77
    Rarity = Magic
    Sockets >= 3
    BaseType "Runic Hatchet"
    SetTextColor 140 190 255 # Magic Item Highlight
    SetFontSize 28

Show # Gear - Endgame
    ItemLevel >= 83
    Rarity = Normal
    Sockets < 3
    BaseType "Tiger Hook"
    SetTextColor 240 240 240 # Normal Item Highlight
    SetBackgroundColor 70 70 70
    SetFontSize 28

Конечный результат для первого блока "Скрыть" будет выглядеть так:

Hide # Gear - Endgame
    ItemLevel >= 77
    Rarity = Magic
    LinkedSockets >= 3
    BaseType "Runic Hatchet"
    SetTextColor 140 190 255 # Magic Item Highlight
    SetFontSize 18

Замена SetFontSize 28 на SetFontSize 18, но только если он появляется в блоке «^ Hide».

Противное регулярное выражение, которое я пробовал в vim :%s/^Hide\(.*\)SetFontSize 28$/Hide\1SetFontSize 18/g

Но сказали, что образец не найден. Пожалуйста, дайте мне знать, если какая-либо дополнительная информация требуется или мой запрос неясен.

1 ответ1

1

Всего два исправления:

  • В регулярном выражении Вима . не включает переводы строк. Возможно, есть какой-то лучший способ, но я обычно делаю (.|[\n]) когда мне это нужно.
  • * жадный, но вы хотите не жадное соответствие здесь. {-} делает свое дело.

И еще одна вещь, которая является моим личным предпочтением, так что примите это во что бы то ни стало: мне было трудно вспомнить, что такое магический персонаж в регулярном выражении Вима, а что нет; поэтому я использовал \v в начале шаблона, чтобы все символы ASCII, кроме '0'-'9' , 'a'-'z' , 'A'-'Z' и '_' имели особое значение

В общем:

%s/\v^Hide((.|[\n]){-})SetFontSize 28/Hide\1SetFontSize 18/g

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .