Попытка превратить
a: 1, 2, 3
a: a, b, v
b: 5, 6, 7
b: 10, 1543, 1345
b: e, fe, sdf
cd: asdf, asdfas dfasdfa,asdfasdfa,afdsfa sdf
e1: asdfas, dafasd, adsf, asdfasd
e1: 1, 3, 2
e1: 9, 8, 7, 6
в
a: 1, 2, 3
a, b, v
b: 5, 6, 7
10, 1543, 1345
e, fe, sdf
cd: asdf, asdfas dfasdfa,asdfasdfa,afdsfa sdf
e1: asdfas, dafasd, adsf, asdfasd
1, 3, 2
9, 8, 7, 6
Итак, строки сортируются. Если последовательные строки начинаются с одной и той же последовательности символов до/включая некоторый разделитель (здесь двоеточие (и пробел после него)), должен сохраняться только первый экземпляр - как и остальная часть всех строк. Там может быть до дюжины (с половиной) строк, начинающихся с идентичной последовательности символов. Вход содержит около 4500 строк...
Пробовал в TextWrangler.
Пока шаблон поиска
^([[:alnum:]]+): (.+)\r((\1:) (.+)\r)*
соответствует правильно, ни замена
\1:\t\2\r\t\3\r
ни
\1:\t\2\r\t\4\r
достает меня где-нибудь рядом с тем, что я ищу.
Шаблон поиска
^(.+): (.+)\r((?<=\1:) (.+)\r)*
отклоняется, если lookbehind не является фиксированной длиной. - Не уверен, что все идет в правильном направлении.
Глядя на Как объединить строки, которые начинаются с тех же элементов в текстовом файле Интересно, есть ли вообще элегантный (скажем: один шаблон поиска, одна замена, запуск один раз).
С другой стороны, я просто не могу найти правильный вопрос для поиска в сети. Если вы знаете лучше, пожалуйста, укажите мне в правильном направлении.
Сохранение остатка выравниваемых строк - это, конечно, сахар на торте...
Спасибо за ваше время.