Для простоты допустим, что у нас есть входные строки с этим форматом:Regex заменить все вхождений данного символа, только после данного матча
*text1*|*text2*
Итак, я хочу, чтобы оставить text1 и удалите все пробелы в text2.
Это может быть легко, если у нас не было TEXT1, простой поиск и замену, как это можно было бы сделать:
%s/\s//g
, но в этом контексте я не знаю, что делать.
Я пытался что-то вроде:
%s/\(.*|\S*\).\(.*\)/\1\2/g
, который работает, но удаление только первый символ, я имею в виду, это должно выполняться на одной и той же линии, один раз для каждого нарушившего пространства.
Таким образом, предпочтительным ограничением является решить это только с одним поиском и заменить. И, хотя я использовал синтаксис Vim, используйте обычный вкус выражения, с которым вам наиболее удобно отвечать, я имею в виду, может быть, вам нужна некоторая функциональность, предлагаемая только Perl.
Edit: Мое решение для Vim:
%s:\(|.*\)\@<=\s::g
'awk' может решить эту проблему за вас в кратчайшие сроки. –
Вы имеете в виду, сначала анализируя «столбец» через awk, а затем используя sed или что-то еще для запуска поиска и замены только в этом столбце? Это похоже на мое фактическое решение, но я хотел бы сделать это только с регулярным выражением. – Doppelganger
@ Карл Норум: Я установил awk, но он просто сидит там и ничего не делает. Или вы имели в виду программу awk? :) – ysth