Оригинальный автор(ы) | Кен Томпсон |
---|---|
Разработчик(и) | AT&T Bell Laboratories |
Первоначальный выпуск | 1973, 51–52 года назад |
Написано в | С |
Операционная система | Unix , Unix-подобный , Plan 9 |
Платформа | Кроссплатформенный |
Тип | Текстовый редактор |
Лицензия | План 9: Лицензия MIT |
ed (произносится как отдельные буквы, / ˌ iː ˈ d iː / ) [1] — строчный редактор для Unix и Unix-подобных операционных систем. Это была одна из первых частей операционной системы Unix, которая была разработана в августе 1969 года. [2] Он остаётся частью стандартов POSIX и Open Group для операционных систем на базе Unix, [3] наряду с более сложным полноэкранным редактором vi .
Текстовый редактор ed был одним из первых трех ключевых элементов операционной системы Unix — ассемблера , редактора и оболочки — разработанных Кеном Томпсоном в августе 1969 года на PDP-7 в AT&T Bell Labs . [2] Многие функции ed пришли из текстового редактора qed, разработанного в alma mater Томпсона Калифорнийском университете в Беркли . [4] Томпсон был хорошо знаком с qed и перереализовал его в системах CTSS и Multics . Версии qed Томпсона были примечательны тем, что впервые реализовали регулярные выражения . Регулярные выражения также реализованы в ed, хотя их реализация значительно менее общая, чем в qed.
Деннис М. Ритчи создал то, что Дуг Макилрой позже назвал «окончательным» ed, [5] и аспекты ed продолжили влиять на ex , который в свою очередь породил vi . Неинтерактивная команда Unix grep была вдохновлена общим специальным использованием qed и более позднего ed, где команда g/re/p
выполняет глобальный поиск по регулярному выражению и выводит строки , содержащие совпадения. Потоковый редактор Unix, sed, реализовал многие из функций скриптов qed , которые не поддерживались ed в Unix. [6] [ не удалось проверить ] [7]
Возможности ed включают в себя:
Известный своей краткостью, ed, совместимый с телетайпными терминалами, такими как Teletype Model 33 , почти не дает визуальной обратной связи [8] и был назван ( Питером Х. Салусом ) «самым враждебным к пользователю редактором из когда-либо созданных», даже по сравнению с современным (и печально известным) TECO [2] . Например, сообщение, которое ed выдаст в случае ошибки и когда он захочет убедиться, что пользователь хочет выйти без сохранения, будет «?». Он не сообщает текущее имя файла или номер строки и даже не отображает результаты изменения текста, если это не запрошено. Более старые версии (около 1981 г.) даже не запрашивали подтверждения, когда команда выхода была выдана без сохранения изменений пользователем. [8] Такая краткость была уместна в ранних версиях Unix, когда консоли были телетайпами , модемы были медленными, а память была драгоценной. По мере совершенствования компьютерных технологий и ослабления этих ограничений редакторы с большей визуальной обратной связью стали нормой.
В современной практике ed редко используется в интерактивном режиме, но находит применение в некоторых сценариях оболочки . Для интерактивного использования ed был включен в редакторы sam , vi и Emacs в 1980-х годах. ed можно найти практически в каждой доступной версии Unix и Linux , и как таковой он полезен для людей, которым приходится работать с несколькими версиями Unix. В операционных системах на базе Unix некоторые утилиты, такие как SQL*Plus, запускают ed в качестве редактора, если переменные окружения EDITOR и VISUAL не определены. [9] Если что-то идет не так, ed иногда оказывается единственным доступным редактором. Часто это единственный случай, когда он используется в интерактивном режиме.
Версия ed, предоставляемая GNU, имеет несколько переключателей для улучшения обратной связи. Использование ed -v -p:
обеспечивает простую подсказку и позволяет получать более полезные сообщения обратной связи. [10] Переключатель -p
определен в POSIX с XPG2 (1987). [3]
Команды ed часто имитируются в других редакторах, работающих на основе строк. Например, EDLIN в ранних версиях MS-DOS и 32-битных версиях Windows NT имеет несколько похожий синтаксис, а текстовые редакторы во многих MUD ( например, LPMud и его потомки) используют синтаксис, подобный ed. Однако эти редакторы, как правило, более ограничены в функциях.
Вот пример расшифровки сеанса ed. Для ясности команды и текст, набранный пользователем, напечатаны обычным шрифтом , а вывод из ed подчеркнут .
аed — стандартный текстовый редактор Unix.Это строка номер два..2и
.,лed — стандартный текстовый редактор Unix.$ $ Это строка номер два.$w текст.txt633s/two/three/
,лed — стандартный текстовый редактор Unix.$ $ Это строка номер три.$w текст.txt65д
Конечным результатом является простой текстовый файл, text.txt
содержащий следующий текст:
ed — стандартный текстовый редактор Unix.
Это строка номер три.
Начиная с пустого файла, a
команда добавляет текст (все команды ed являются отдельными буквами). Команда переводит ed в режим вставки , вставляя символы, которые следуют за ней, и завершается одной точкой на строке. Две строки, введенные до точки, попадают в буфер файла. 2i
Команда также переходит в режим вставки и вставляет введенный текст (в нашем случае — одну пустую строку) перед второй строкой. Все команды могут иметь префикс в виде номера строки для работы с этой строкой.
В строке ,l
строчная буква L обозначает команду list. Перед командой стоит диапазон, в данном случае ,
это сокращение для 1,$
. Диапазон — это два номера строк, разделенных запятой ( $
означает последнюю строку). В ответ ed перечисляет все строки, от первой до последней. Эти строки заканчиваются знаками доллара, поэтому пробелы в конце строк хорошо видны.
После того, как пустая строка вставлена в строку 2, строка, которая читается как "Это строка номер два." теперь на самом деле является третьей строкой. Эта ошибка исправляется с помощью , команды подстановки. Она применит ее к правильной строке; после команды следует текст для замены, а затем замена. Перечисление всех строк со строкой теперь показано как правильное.3s/two/three/
3
,l
w text.txt
записывает буфер в файл, text.txt
заставляя ed ответить 65 — числом символов, записанных в файл. q
завершит сеанс ed.
Проект GNU имеет множество шуток вокруг ed, размещенных на его веб-сайте. Кроме того, в документации glibc упоминается код ошибки, вызываемый ED
его описанием (errorstr) просто одним вопросительным знаком, отмечая, что «опытный пользователь поймет, что не так». [11]
Некоторое время спустя возникла потребность в другой специализированной программе, gres, для замены: g/re/s. Ли Макмахон взялся написать ее и вскоре предвидел, что не будет конца семейству: g/re/d, g/re/a и т. д. По мере развития его концепции она превратилась в sed…