Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционная система UNIX.doc
Скачиваний:
94
Добавлен:
01.05.2014
Размер:
1.67 Mб
Скачать

6.14. Работа со строками

6.14.1. Разбиение строк

Редактор обеспечивает возможность разбиения строки на несколько более коротких строк путем вставки символов новой строки. Например, строка:

текст xy текст

может быть разбита на две между символами "x" и "y" следующим образом:

s/xy/x\

y/

команда:

s/xy/x\

zzz\

y/

разобьет исходную строку на три, при этом будет добавлена строка "zzz".

6.14.2. Объединение строк (j)

Объединение строк осуществляется с помощью команды "j". Например, если имеются строки:

текст x

y текст

то установив первую строку текущей и задав команду "j", получим:

текст xy текст

Можно объединить все строки в одну большую строку и распечатать ее.

6.14.3. Копирование строк (t)

Для копирования строк текста в буфере редактора используется команда "t".

Формат команды:

[n[, k]]tl<CR>

где n, k - номера начальной и конечной заменяемых строк; t - имя команды копирования; l - номер строки, после которой размещаются копируемые строки с номерами от "n" до "k" включительно.

По данной команде строки с номерами от "n" до "k" включительно пересылаются на место после строки с номером "l".

Если в команде задан только номер одной строки, то пересылается строка с указанным номером.

Если номер строки не задан, то пересылается текущая строка.

Строки с номерами от "n" до "k" включительно сохраняются на своем прежнем месте.

Команду "t" удобно использовать для создания текстов с повторяющимися данными.

Пример.

1, 7t15

группу строк с 1-й по 7-ю поместить после 15-й строки.

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

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

Петров П.К.

Иванов С.Б

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

П.К. Петров

С.Б. Иванов

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

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

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

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

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

6.14.5. Маркеры

Редактор ed позволяет пометить строку некоторым именем, чтобы впоследствии обращаться к ней по этому имени независимо от фактического номера строки. Это удобно при перемещении строк и отслеживании их по мере перемещения. Для маркировки используется команда назначения имени. Если ввести команду "kx", то текущая строка будет отмечена маркером с именем "x". Если перед "k" указывается номер строки, будет отмечена соответствующая строка. (Имя должно представлять собой одну строчную букву латинского алфавита). После этого можно ссылаться на отмеченную строку с помощью адреса "'x".

Пример. Пусть после создания файла были выполнены следующие команды:

a

Первая строка вводимого текста

Вторая строка

Третья строка

Последняя строка

.

-3

ka

2

kb

$

'a, 'bm

в результате будет получена следующая последовательность строк:

Третья строка

Последняя строка

Первая строка вводимого текста

Вторая строка

Соседние файлы в предмете Операционные системы