UNIX — универсальная среда программирования - Керниган Брайан Уилсон
Шрифт:
Интервал:
Закладка:
И, наконец, ed обладает высоким быстродействием. Вполне возможно вызвать ed, заменить в файле одну строку, записать новую версию и вернуться из него, причем все это происходит быстрее, чем один только запуск большого и более сложного экранного редактора.
Основные сведенияПрограмма ed редактирует один файл за один раз. Она работает с копией файла. Чтобы внести исправления в первоначальный файл, вы должны дать явную команду. Редактор предоставляет команды для манипуляций с последовательными строками или строками, соответствующими образцу, а также команды для внесения в строки изменений.
Каждая команда ed представляет собой символ (обычно букву). Большинству команд может предшествовать один или два номера строки, которые указывают, на какую строку или строки должна воздействовать команда: в противном случае подразумевается номер, принятый по умолчанию. Номер строки можно специфицировать абсолютной позицией в файле (1, 2 ...), символами $ для последней строки и "." для текущей, процедурой поиска по образцу, использующей регулярные выражения, и их аддитивными комбинациями.
Рассмотрим, как с помощью ed можно создавать файлы, используя стихи Де Моргана из первой главы.
$ ed poem
? poem Предупреждение: файл poem не существует
а Начать добавление строк
Great fleas have little fleas
upon their backs to bite 'em,
And little fleas have lesser fleas,
and so ad infinitum.
. Печатаем '.' чтобы закончить ввод
w poem Пишем строки в файл poem
121 ed сообщает, что записан 121 символ
q Выход
Команда а добавляет или присоединяет строки. Режим добавления заканчивается строкой, состоящей из одной точки. Из-за отсутствия индикации режима, в котором вы работаете, возможны две распространенные ошибки: ввод текста без команды а и ввод команды до ввода '.'.
Редактор ed никогда не будет писать ваш текст в файл автоматически; вы должны задать это с помощью команды w. Однако, если вы пытаетесь закончить редактирование без записи ваших изменений, ed выдает '?' как предупреждение. Есть другая команда q, позволяющая завершить работу независимо от внесения исправлений.
$ ed poem
121 Файл существует и имеет 121 символ
а Добавить еще строки в его конец
And the great fleas themselfs, in turn,
have greater fleas to go on;
While these again have greater still,
and greater still, and so on.
. Печатаем '.' для завершения
q Пытаемся выйти
? Предупреждение: не было записи
w Нет имени файла; подразумевается poem
263
q Теперь можно выходить
$ wc poem Проверьте для уверенности
8 46 263 poem
$
Временная передача управления shell с помощью '!'Если вы запустили ed, то можете временно выйти из него, чтобы запустить другую команду shell. В этом случае нет необходимости прекращать работу достаточно ввести команду ed '!'.
$ ed poem
! wc poem Запуск wc без выхода из ed
8 46 263 poem
! Вернулись из команды
q Выход без w годится: не было исправлений
$
ПечатьСтроки файла нумеруются как 1, 2 … Вы можете печатать n-ю строку, дав команду np или просто номер n, и строки с m по n, используя m,np. "Номером строки" $ обозначается последняя строка, так что строки можно не считать.
1 Печатать первую строку; 1р то же самое $ Печатать последнюю строку; $p то же самое 1,$p Печатать строки с первой по последнююПечатать файл по одной строке проще всего; нажимая клавишу RETURN, вы можете вернуться на одну строку назад с помощью '-'. Можно комбинировать номера строк с '+' и '-'.
$-2,$p Печатать последние три строки 1,2+3p Печатать строки с первой по пятуюОднако нельзя печатать после конца файла или в обратном порядке; команды типа $,$+1p и $,1p считаются незаконными.
Команда list 1 выводит текст в формате с видимыми символами. Это удобно при поиске в файлах управляющих символов, при различении пробелов, табуляции и т.п. (см. vis в гл. 7).
ОбразцыКак только размер начинает превышать две строки, становится неудобным печатать его весь целиком, чтобы отыскать нужную строку. Редактор ed предлагает способ поиска строк, совпадающих с некоторым образцом, шаблоном: /pattern/ обнаруживает очередное вхождение pattern.