Ed — один из старейших текстовых редакторов, существующий уже почти четыре десятилетия. Он появился задолго до Vi или Vim, и, судя по его функциям, можно с уверенностью сказать, что Vi был создан на основе ed, поскольку у них много общего.
Прежде чем мы продолжим, позвольте мне пояснить, что этот текстовый редактор сегодня используется редко. Так зачем же о нём узнавать? Дело в том, что Vi часто встречается в минималистичных дистрибутивах Linux, но иногда в таких дистрибутивах, как Alpine Linux или Busybox, где нет Vi, единственным вариантом является ed.
Как упоминалось ранее, ed — это самый старый редактор, который по умолчанию поставляется с каждой системой Unix/Linux. Вы можете выполнить команду «ed
», чтобы проверить его наличие (для выхода введите и нажмите «Q
«). У него очень простой интерфейс, который может сбить с толку новичков, но как только вы освоитесь, вы сможете легко использовать его для создания, редактирования, отображения и обработки файлов.
В этой статье я сосредоточусь в основном на его использовании, а не на объяснении истории редактирования. Итак, начнём…
Описание | ed (линейный редактор) |
Уровень сложности | Умеренный |
Привилегии Root или Sudo | НЕТ |
Совместимость с операционной системой | Ubuntu, Manjaro, Fedora и т.д. |
Предварительные условия | – |
Требуется доступ в Интернет | НЕТ |
Если вы пользуетесь Nano, то вам не нужно ничего объяснять, но пользователи Vi или Vim могут быстро освоить использование ed, поскольку в нём также есть режимы, аналогичные Command и Insert, которые идентичны им.
Мы должны порекомендовать использовать префикс для командного режима, чтобы вы могли легко определить текущий режим. Дело в том, что при входе в режим редактирования вы сразу увидите пустой экран без каких-либо меню, опций, сообщений или чего-либо ещё.
Итак, новичкам часто бывает сложно работать с текстовым файлом. Давайте мы покажем, что имею в виду: откройте терминал и выполните команду «ed
», и вы увидите следующий результат:
andreyex@linux:-$ ed l ? m ? a Linux AndreyEx
На изображении выше мы ввели несколько команд и написал текст в неопределённом файле. Теперь их невозможно различить, но добавление префикса в командный режим упростит работу с ed. Для этого используйте эту команду с флагом «-p
», чтобы добавить префикс в командный режим «ed
».
Не стесняйтесь заменять префикс “:
” чем-нибудь другим.
$ ed -p ": "
Выходной сигнал:
: l ? : m ? : a Linux AndreyEx . :
На этот раз в выводе можно найти смысл, поэтому позвольте мне рассказать вам, что мы здесь сделали. Во-первых, всё, что находится после префикса «:
», является командой (аналогично командам Vi); команды «l
» и «m
» неверны, поэтому в выводе появляется «?», указывающий на ошибку (наберите и введите «H
», чтобы увидеть полное сообщение об ошибке).
Команда «a
» используется для перехода в режим вставки, после чего мы вводим текст «Linux AndreyEx» в наш неопределённый файл. Чтобы выйти из режима вставки и вернуться в командный режим, необходимо сначала перейти на новую строку, ввести и нажать «.
» (точку).
Надеюсь, вы поняли, как работать с текстовым файлом с помощью ed, особенно если вы немного знакомы с Vi или его производными. Важным моментом в работе с ed является построчное редактирование, которое требует последовательного подхода, а не одновременного изменения всего содержимого. Если вы не поняли, не волнуйтесь, после просмотра различных примеров вы поймёте, что я имею в виду.
Хорошо, теперь я покажу вам, как использовать ed для создания, редактирования, отображения и обработки файлов на разных примерах. Давайте начнём…
1. Вы можете использовать ed для редактирования существующего файла, создания нового или начала работы без указания имени файла; все изменения будут сохраняться в буфере, а для последующего сохранения в текстовом файле потребуется командный режим. Сейчас я покажу вам, как работать без указания имени файла, поскольку, как только вы поймёте принцип, всё остальное будет просто. Для начала просто введите «ed
», чтобы открыть редактор без указания файла.
2. Когда вы вводите «ed
», по умолчанию вы находитесь в командном режиме (принимаете команды). Чтобы записать содержимое в текстовый файл, введите «a
», чтобы перейти в режим вставки (или записи). Запишите содержимое, а когда закончите работу, введите «.
» в новой строке, чтобы вернуться в командный режим.
3. Каждый раз, когда вам нужно добавить новый контент в текстовый файл, вы должны сначала перейти в режим вставки, добавить контент, а затем вернуться в командный режим (как в Vi). Например, после добавления строк в приведённом выше примере я снова перешёл в режим вставки, добавил новую строку, а затем вернулся в командный режим.
4. Когда вы закончите работу с текстовым файлом, сохраните его, указав имя файла. Например, чтобы сохранить все внесённые выше изменения в новом файле, вы можете использовать «f <filename>
» в командном режиме, а затем использовать команду «w
», чтобы записать содержимое буфера в указанный файл.
Последняя строка с цифрой 81 обозначает количество байт, записанных в текстовый файл.
5. После сохранения изменений в новом файле вы можете выйти из редактора, введя «Q
» в командном режиме, а затем просмотреть сохранённый файл в текущем каталоге с помощью «ls
» и прочитать его содержимое с помощью «cat
».
6. Ещё раз: когда вы откроете файл с помощью команды «ed
», сначала вы увидите общее количество содержимого в байтах. Чтобы просмотреть всё содержимое файла, введите «,p
» в командном режиме.
Если вы просто напечатаете и введёте «p
», вы получите последнюю (или самую новую) строку в файле.
7. Если вы хотите вывести на печать определённую строку в файле, вы можете напрямую ввести «<line-number>
» или использовать «<line-number>p
» в командном режиме.
Если указанная строка не существует, на выходе вы получите «?
».
8. Если вы хотите вывести на печать всё содержимое файла вместе с номером строки, вы можете использовать «,n
» в командном режиме.
Если вы просто нажмёте и введёте «n
», вы получите последнюю (или самую новую) строку в файле с номером строки.
9. Чтобы вывести определённую строку с номером, вы можете использовать «<line-number>n
» в командном режиме.
10. Если вы хотите вставить новый контент в строку, например, добавить контент в начало (нулевая позиция), используйте «<line-number>a
», а чтобы добавить контент во вторую от конца строку, используйте «i
» в командном режиме.
11. Если вы хотите обновить существующую строку, вы можете использовать «<line-number>c
» в командном режиме.
12. Если вы хотите удалить содержимое из файла, вы можете указать диапазон строк следующим образом: «<from>,<to>d
» или напрямую указать конкретную строку для удаления следующим образом: «<line-number>d
» в командном режиме.
13. Если вы случайно обновили или удалили содержимое, вы можете ввести «u
» в командном режиме, чтобы отменить изменения, и повторить ввод, чтобы внести изменения. Однако помните, что можно отменить только последнее изменение, поэтому будьте осторожны при редактировании файлов с помощью ed.
14. Чтобы скопировать диапазон строк или отдельную строку и вставить её в определённое место, можно использовать «<from>,<to>t<position>
» или «<line-number>t<position>
» в командном режиме.
15. Вместо дублирования вы можете переместить строку из одного места в другое, используя метод, очень похожий на предыдущий. Просто замените «t
» на «m
» в «<from>,<to>m<position>
» или «<line-number>m<position>
» в командном режиме.
16. Если ваш файл слишком большой и вы ищете в нём определённый текст, используйте «/<query>
» в командном режиме. Однако помните, что для поиска каждого вхождения вам придётся многократно выполнять одну и ту же команду.
17. Чтобы заменить первое вхождение диапазона текста, конкретного текста или последнего текста, вы можете использовать «<from>,<to>s/search/replace
», «<line-number>s/search/replace
», «s/search/replace
» в командном режиме.
18. При работе с текстовым файлом в ed вы можете захотеть выполнить команду оболочки. В этот момент вместо того, чтобы выходить из редактора, вы можете использовать «!<command>
» для выполнения команды оболочки в редакторе ed.
19. Чтобы сохранить вывод в существующий файл после выполнения команды оболочки предыдущим способом, вы можете использовать «r !<command>
».
20. Здесь мы рассмотрели почти все примеры, но для упрощения вашей практики ниже перечислены все используемые команды с их определениями.
Команда ed | Определение |
---|---|
H | Включите полный отчет о сообщениях об ошибках. |
a | Режим вставки. |
<line-number>a | Добавьте новое содержимое к определенному номеру строки. |
i | Обновите предпоследнюю строку. |
. | Выйдите из режима вставки. |
f <filename> | Сохраните файл с определенным именем файла. |
Q | Выйди из редакции. |
,p | Распечатайте все содержимое файла. |
<line-number> или <line-number>p | Выведите определенную строку из файла. |
<from>,<to>p | Выведите диапазон строк из файла. |
,n | Выведите все содержимое файла с указанием номера строки. |
<line-number>n | Выведите определенную строку из файла с указанием номера строки. |
<from>,<to>n | Выведите диапазон строк из файла с указанием номера строки. |
<line-number>c | Обновите содержимое указанной строки. |
<from>,<to>c | Обновите содержимое между диапазонами строк. |
<line-number>d | Удалите содержимое указанной строки. |
<from>,<to>d | Удалите содержимое между диапазонами строк. |
<line-number>t<position> | Скопируйте конкретное содержимое строки в указанную позицию. |
<from>,<to>t<position> | Скопируйте диапазон содержимого строки в указанную позицию. |
<line-number>m<position> | Переместите конкретное содержимое строки в указанную позицию. |
<from>,<to>m<position> | Переместите диапазон содержимого строки в указанную позицию. |
/<query> | Выполните поиск по указанному запросу. |
s/search/replace | Выполняйте поиск и заменяйте каждый экземпляр текста. |
<line-number>s/search/replace | Выполните поиск и замените каждый экземпляр текста в указанной строке. |
<from>,<to>s/search/replace | Выполняйте поиск и заменяйте каждый экземпляр текста в пределах диапазона строк |
Наконец-то мы подошли к концу этой статьи. Что ж, сегодня «ed
» используется нечасто, и большинство из вас даже не слышали о нём до сих пор, но это забавный редактор, который вы можете иногда использовать.
Теперь, если у вас есть какие-либо вопросы или пожелания по статье, сообщите нам об этом в комментариях.