Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

6.15. Работа с файлами

6.15.1. Команда указания имени файла (f)

Данная команда предназначена для запроса или изменения сохраняемого редактором имени файла (текущего имени).

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

	f [файл]<CR>

В ответ на команду "f" без агрумента редактор напечатает сохраненное им ранее имя файла (текущее).

Это имя запоминается редактором при вызове по команде shell:

	ed file 
или по команде редактора:
	e file 
Например, в результате выполнения команды:
	f file1
имя файла, хранимое редактором, будет заменено на новое имя "file1", и оно станет текущим.

Команда записи "w" без аргументов копирует буфер редактора в файл с текущим именем.

Пример создания двух вариантов файла "file1":

        ed file1
        f file2
          ...
        w
        w file3
        q

6.15.2. Объединение файлов

Предположим, что в файле "file1" сразу же после слов "текст..." требуется вставить "file2".

Для этого необходимо вызвать редактор для фала "file1", найти символы "текст..." и добавить в это место файл "file2":

        ed file1
        /текст.../
        текст...    (ответ редактора)
        .r file2

Команда "r" без адресов добавляет читаемые строки в конец, т.е. работает аналогично "$r".

6.15.3. Разбиение файла

Предположим, что нужно выделить в отдельный файл некоторую таблицу, чтобы ее можно было отдельно форматировать и проверять.

        .TS
        ... (содержимое)
        .TE 

Для выделения этой таблицы в отдельный файл с именем "table" в первую очередь нужно найти начало этой таблицы (строку "TS"), а затем записать соответствующий фрагмент в файл:

        /^\.TS
        .TS  (редактор печатает найденную строку)
        .,/^\.TE/w table 

В результате этого поставленная цель будет достигнута. Можно выполнить все это и в одной команде:

	/^\.TS/;/^\.TE/w table 

Дело в том, что команда "w" может выполнять запись не всего файла, а некоторой группы строк. При желании можно записать даже одну строку, для этого надо задать один номер строки вместо двух.

6.15.4. Перекомпоновка файла

6.15.4.1. Перемещение строк (команда m)

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

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

	[n[, k]]ml<CR>
где n, k - номера начальной и конечной перемещаемых строк;
m - команда перемещения;
l - номер строки, после которой надо поместить строки с номерами от "n" до "k" включительно.

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

Пример.

	1, 3m$
группу строк с 1-й по 3-ю поместить после последней строки в буфере редактора.

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

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

Данная команда может успешно использоваться вместе с командой поиска.

Например, имеется следующий текст:

        ПЕРВЫЙ ПАРАГРАФ
        (текст)
        КОНЕЦ ПЕРВОГО ПАРАГРАФА
        ВТОРОЙ ПАРАГРАФ
        (текст)
        КОНЕЦ ВТОРОГО ПАРАГРАФА 

Если необходимо переставить параграфы местами, то это можно выполнить с помощью команды:

        /ВТОРОЙ/, /КОНЕЦ ВТОРОГО/m/ПЕРВЫЙ/-1

Строки, начиная со строки, содержащей слово "ВТОРОЙ", до строки, содержащей слова "КОНЕЦ ВТОРОГО" включительно, помещаются перед строкой, содержащей слово "ПЕРВЫЙ".

По завершинию операции перемещения текущей строкой становится последняя перемещенная строка (в последнем примере - это строка со словами "КОНЕЦ ВТОРОГО").

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

Команда копирования "t" аналогична команде "m", за исключением того, что блок текста не удаляется, а копия этого блока помещается после указанной строки текста.

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

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

В следующем примере показано, как поместить 3 строки ниже последней строки. Экран выглядит следующим образом:

Пример.

        5, 8n<CR>
        5     Close the door of the room.
        6     Break glass of neareat alarm.
        7     Pull lever.
        8     Locate and use fire extinguishar.
        30n<CR>
        30    A chemical fire in the lab requires that you:
        6,8t30<CR>
        30, $n
        30    A chemical fire in the lab requires that you:
        31    Break glass of neareat alarm.
        32    Pull lever.
        33    Locate and use fire extinguishar.
        6, 8n<CR>
        6     Break glass of neareat alarm.
        7     Pull lever.
        8     Locate and use fire extinguishar.

Текст с 6-й по 8-ю строки остается на месте, копия этих трех строк помещается после 30-й строки.