Перестройка строк
6.14.4. Перестройка строк
Предположим, что в начале каждой строки файла стоят имена вида: Петров П.К. Иванов С.Б и т.д., требуется переделать текст таким образом, чтобы инициалы стояли перед фамилиями, т.е. П.К. Петров С.Б. Иванов
Такой результат можно получить с помощью нескольких команд редактирования, что однако достаточно сложно и может привести к целому ряду ошибок.
Альтернативный метод заключается в том, чтобы отметить элементы строки (в данном случае фамилию и инициалы), а затем переставить эти элементы. Если в левой части команды подстановки "s" какой-либо элемент образца заключен в "\(" и "\)", то он запоминается и может использоваться в правой части команды. В правой части команды обозначение "\1" относится к тому, что соответствало первой паре \(...\), "\2" - второй паре и т.д.
Следующая команда: 1, $s/^\([^ ]*\) *\(.*\)/\2 \1/ выполняет нужную работу, хотя ее и трудно прочитать. Первая пара \(...\) соответствует фамилии, которая представляет собой любую строку символов вплоть до пробела; в правой части команды на нее выполняется ссылка с помощью "\1". Вторая пара \(...\) обозначает то, что стоит после запятой и любого количества пробелов, а ссылка на нее выполняется с помощью "\2".