Библиотека сайта rus-linux.net
6.17. Дополнительные возможности
6.17.1. Временный выход из редактора
Иногда бывает удобно на некоторое время выйти из редактора, для выполнения какой-либо другой команды, не покидая редактор. Это можно сделать с помощью команды временного выхода "!".
Если ввести:
!команда_системыпроцесс редактирования приостанавливается и выполняется указанная команда. Редактор сообщает о завершении этой команды, печатая еще один восклицательный знак "!", после этого можно снова возобновлять редактирование.
6.17.2. Восстановление после останова
Если произойдет неожиданный останов, система UNIX пытается сохранить содержимое буфера редактора в специальном файле ed.hup. Позднее вы можете попытаться восстановить текст из этого файла одним из двух способов. Первый: вы можете воспользоваться командой shell, чтобы переписать файл ed.hup в файл с другим именем. Второй: вы можете войти в редактор ed и воспользоваться командой f для переименования в буфере:
ed ed.hup<CR> 928 f myfile<CR> myfile
6.17.3. Командные файлы редактора
Если достаточно сложный набор операций редактирования должен быть выполнен над многими файлами, это проще всего сделать путем создания командного файла редактора, содержащего нужные операции, и последующего применения этого командного файла поочередно ко всем файлам.
Предположим, например, что нужно заменить каждое слово "версия1" на "версия2" и каждое слово "1985" на "1986" в большом количестве файлов. Поместим в файл "list" следующий строки:
g/версия1/s//версия2/g g/1985/s//1986/g w qпосле этого можно воспользоваться командами:
ed file1 < list ed file2 < list ...
Это приведет к тому, что редактор ed будет получать команды из ранее приготовленного файла. В этом случае вся работа должна планироваться заранее.
С помощью интерпретатора команд системы можно более или менее легко просмотреть набор файлов циклически.
6.17.4. Режим шифрования
При обработке зашифрованных файлов, редактор вызывается с параметром "-x":
ed -x имя_файла<CR>
В этом случае перед началом копирования файла запрашивается ключ, по которому производится шифрование и расшифровка информации при всех обменах с файлом.
Переход в режим шифрования возможен и в процессе сеанса. С этой целью пользователь может установить текущий ключ с помощью команды:
xПосле чего будет выдана подсказка:
Entering encrypting mode! Key:и пользователь набирает ключ (при этом символы не отображаются на экране терминала). Признаком окончания ввода ключа является ввод <CR>. Ввод ключа нулевой длины отменят режим шифрования.
6.17.5. Программа grep
Иногда требуется найти случаи употребления некоторого слова или образца в ряде файлов для того, чтобы отредактировать их или просто проверить наличие или отсутствие. Можно отредактировать каждый файл в отдельности и отыскать там представляющий интерес образец, однако, если файлов много, это может оказаться достаточно утомительным, а если файлы очень велики, то просто невозможным из-за ограничения редактора ed.
Программа grep языка управления заданиями предназначена для печати всех строк, соответствующих указанному образцу. Так, команда:
grep "нечто" файл1 файл2 файл3 ...<CR>находит "нечто" везде, где оно встречается в файлах. Команда "grep" указывает также файл, в котором была найдена каждая строка и (если задан параметр "-n") номер строки.
Образец, обозначенный "нечто", может быть любым образцом, который вы используете в редакторе, т.к. grep и ed используют один и тот же механизм поиска образцов. Если образец содержит какие-либо неалфавитные символы, его целесообразно всегда заключать в апострофы ('...'), поскольку многие такие символы имеют специальное значение для интерпретатора команд shell. Если не поместить их в апострофы, интерпретатор команд попытается обработать их перед тем, как они будут переданы команде grep.
Существует также возможность находить строки, которые не содержат указанного образца. Команда:
grep -v "нечто" файл1 файл2 ...<CR>находит все строки, которые не содержат "нечто". Ключ "-v" должен находиться в указанной позиции. С помощью команд "grep" и "grep -v" можно выбирать строки, содержащие некоторую комбинацию образцов. Например, для получения всех строк, содержащих "x", но не содержащих "y", можно использовать команду:
grep x файл ... | grep -v y<CR>(символ "|" означает, что результат работы первой команды используется в качестве входа второй команды).
6.17.6. Команды помощи
Обратите внимание, что когда вы редактируете файл, редактор ed иногда в ответ на введенную вами команду отвечает знаком "?". Знак "?" означает диагностическое сообщение при обнаружении ошибки. Команды помощи выдают вам короткое сообщение, объясняющее причину ошибки. Существуют две команды помощи:
h - отображает короткое сообщение об ошибке;
H - устанавливает в ed режим распечатки короткого сообщения
об ошибке каждый раз, когда появляется "?". Для отмены
этого режима вновь введите H.
Если попытаться завершить работу с ed, не записав измененный буфер в файл, то появится знак "?". Когда появится "?", введите "h":
q<CR> ? h<CR> warning: expecting "w"