Операционная система UNIX. Руководство пользователя

       

Перестройка строк


Предположим, что в начале каждой строки файла стоят имена вида:

Петров П.К. Иванов С.Б

и т.д., требуется переделать текст таким образом, чтобы инициалы стояли перед фамилиями, т.е.

П.К. Петров С.Б. Иванов

Такой результат можно получить с помощью нескольких команд редактирования, что однако достаточно сложно и может привести к целому ряду ошибок.

Альтернативный метод заключается в том, чтобы отметить элементы строки (в данном случае фамилию и инициалы), а затем переставить эти элементы. Если в левой части команды подстановки "s" какой-либо элемент образца заключен в "\(" и "\)", то он запоминается и может использоваться в правой части команды. В правой части команды обозначение "\1" относится к тому, что соответствало первой паре \(...\), "\2" - второй паре и т.д.

Следующая команда:

1, $s/^\([^ ]*\) *\(.*\)/\2 \1/

выполняет нужную работу, хотя ее и трудно прочитать. Первая пара \(...\) соответствует фамилии, которая представляет собой любую строку символов вплоть до пробела; в правой части команды на нее выполняется ссылка с помощью "\1". Вторая пара \(...\) обозначает то, что стоит после запятой и любого количества пробелов, а ссылка на нее выполняется с помощью "\2".



Содержание раздела