1
104116001|PRODUCT|511|RAMP||2016-03-18|2016-03-23|060.00|1||R|012
104116001|PRODUCT|512|RAMP||2016-03-18|2016-03-23|060.00|1||R|012
104116001|PRODUCT|514|RAMP||2016-03-18|2016-03-23|060.00|1||R|012
104116001|PRODUCT|515|RAMP||2016-03-18|2016-03-23|060.00|1||R|012

Выше я хочу заменить |511| с |211| Точно так же все |512| - |212| |514| - |214| и главное здесь - я не хочу заменять 515 - 215 (я хочу, чтобы это было так же).

И я использовал команду, которую вы упомянули:

:map <leader>fq :%s/a/b/ge <Bar> %s/c/d/ge <Bar> %s/e/f/ge<CR>  

который не работал в моем случае, и любая помощь по этому вопросу, большое спасибо!

1 ответ1

2

Вам нужно регулярное выражение, которое начинается с 51, а его 3-й символ может быть любым из 1,2 или 4. Затем вы хотите заменить строку, которая соответствует регулярному выражению, следующим образом: первым символом будет 21, а третьим должен быть любой символ, соответствующий третьему символу, указанному в регулярном выражении (то есть: без изменений).

%s/51\([124]\)/21\1/g

Здесь [124] означает любой из 1,2 или 4, а \([124] \) означает «давайте вспомним символ, который соответствует [124]». В строке замены \1 означает «символ, который мы запомнили как первую запоминаемую подстроку» (точнее: подстрока, которая соответствует части регулярного выражения между первой парой \(\)).

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