Требуется распределить их по буквенным группам аля А-В с таким расчетом например что если много фамилий начинающихся на А, В, Д, Е, Ц, и мало на остальные буквы, то группы должны сформироваться А-Б, В-Д, Е-Ж, З-Ц, Ч-Я.
вы забыли указать sed -r, чтобы включить поддержку регулярных выражений
The only difference between basic and extended regular expressions is in
the behavior of a few characters: `?', `+', parentheses, braces (`{}'),
and `|'. While basic regular expressions require these to be escaped
if you want them to behave as special characters, when using extended
regular expressions you must escape them if you want them _to match a
literal character_. `|' is special here because `\|' is a GNU
extension - standard basic regular expressions do not provide its
functionality.
Вариант покороче:
...for (int i = 0; i < s.length(); i++) a[idx++] = s[i] - '0';
То, что в языках со статической типизацией выявляет компилятор еще до первого запуска программы, в языках с динамической типизацией может вылезти боком даже через полгода после запуска в эксплуатацию.
Ты и так их не теряешь, они расположены в ветке и всегда доступны через её имя. Мало того, переходить на коммит мало когда надо, ты всё равно его не изменишь, потому что вся история после него опирается на него. И ты можешь от него только отрастить ветку, а потом влить её на самую верхушку всего проекта. Есть ещё rebase, который тоже делать не рекомендуется, так как он нарушает коллективную разработку и генерит все коммиты после изменённого заново с новыми хешами.