ex — линейный редактор в Linux: руководство и шпаргалка
Что такое ex?
ex — это линейный редактор текста, созданный Биллом Джоем. Коротко: он редактирует файл строка за строкой, а не показывает весь экранный буфер. Линейный редактор обрабатывает одну строку за раз, принимает команды и может выводить результат печатью или на экран.
Определение в одну строку: линейный редактор — текстовый инструмент для поочерёдной работы со строками файла.
Важно: ex тесно связан с vi и впоследствии с vim — многие команды и синтаксис совпадают.
Исторический контекст и связь с vi и vim
Линейные редакторы появились в эпоху телетайпов и печатающих терминалов. Полноэкранные редакторы стали популярны позже, когда появились видео-терминалы и дисплеи. Тем не менее, ex продолжил существовать как полезный инструмент для автоматизации и редактирования в окружениях без GUI.
Ключевая связь: Bill Joy написал и ex, и раннюю версию vi. vi можно рассматривать как экранную надстройку над ex — поэтому многие команды одинаковы.
Как запустить ex в Linux
Запуск простой:
ex fileЭто откроет редактор и покажет приглашение в виде двоеточия (:). Это похоже на командный режим vi.
Чтобы передать ex скрипт через стандартный ввод, используйте дефис как имя файла и перенаправление stdin:
ex - file < scriptЭто полезно для автоматизированных правок из скриптов.
Печать строк с помощью ex
Чтобы увидеть текущую строку, используйте команду :p.
Чтобы вывести номер текущей строки, используйте :=
Чтобы напечатать диапазон строк, укажите начальную и конечную строки через запятую. Пример: вывести строки с 3 по 6:
:3,6Совет: можно комбинировать относительные адреса, например .,+2 (текущая строка и две следующие) или $ для последней строки.
Редактирование строк с помощью ex
Вставка строки: используйте :insert или сокращённо :i, затем введите текст строки и завершите режим вставки точкой на отдельной строке:
:i
Новая строка текста
.Удаление текущей строки: :delete или :d
Перемещение строки: :move или :m, указывая целевую позицию. Пример: переместить текущую строку после строки 10:
:m 10Замечание: команды работают со строковыми адресами — можно указывать диапазоны, относительные смещения и метки.
Поиск и замена текста в ex
Главная сила ex — команды поиска и замены, похожие на sed. Базовый синтаксис замены одной строки:
s/old/new/Чтобы заменить повсеместно по всему файлу, используйте приставку % и флаг g:
:%s/old/new/gПримеры и полезные флаги:
- g — глобально в строке (все вхождения).
- c — подтверждать каждую замену (confirm).
- i — игнорировать регистр (в зависимости от версии).
Пример: заменить “foo” на “bar” во всём файле с подтверждением:
:%s/foo/bar/gcПримечание о регулярных выражениях: синтаксис схож с тем, что использует sed и традиционный vi. Для сложных шаблонов сверяйтесь с документацией вашей версии ex/vi.
Переход в vim
Полноэкранный режим удобнее для интерактивной работы. Чтобы перейти из ex в экранный vi/vim-подобный режим, выполните:
:visualПосле этого можно работать в привычном режиме экрана и вернуться к командному режиму при необходимости.
Когда ex полезен и когда лучше другой инструмент
Когда использовать ex:
- Быстрая правка конфигурационного файла по SSH, когда нет удобного терминала.
- Автоматические правки из скрипта (ex читает команды из stdin).
- Сценарии, где нужен минимальный набор зависимостей.
- Работа на старых или ограниченных системах без полноэкранной поддержки.
Когда ex не подходит:
- Интерактивная правка больших участков кода — используйте vim, nano или GUI-редактор.
- Когда удобнее видеть контекст и несколько файлов одновременно.
Альтернативы:
- sed — для пакетных замен и потоковой обработки.
- awk — для аналитической обработки строк и колонок.
- ed — ещё более минималистичный линейный редактор.
- vim/vi, nano — экранные редакторы для интерактивной работы.
Краткая шпаргалка (cheat sheet)
- Открыть файл: ex file
- Текущая строка: :p
- Номер строки: :=
- Диапазон: :3,6
- Вставка: :i [текст] .
- Удалить: :d
- Переместить: :m <номер>
- Поиск и замена в файле: :%s/old/new/g
- Перейти в экранный режим: :visual
Дополнительный пример: заменить только в строках с 10 по 20:
:10,20s/old/new/gМетодология: быстрый рабочий поток для правки файла
- Откройте файл: ex file
- Посмотрите текущую область: используйте :p или диапазон :.,.+5
- Выполните пакетные изменения через :%s/…/../g или уточните диапазон
- Проверьте изменения печатью диапазонов
- Сохраните и выйдите (см. критерии приёмки)
Критерии приёмки
- Изменения применены только в указанных строках или с подтверждением.
- Файл синтаксически корректен (для конфигураций — проверить сервис).
- Резервная копия создана, если изменения критичны.
Чек-листы по ролям
Системный администратор:
- Сделать резервную копию файла: cp file file.bak
- Открыть файл в ex: ex file
- Выполнить массовую замену с подтверждением: :%s/old/new/gc
- Проверить ключевые строки и перезапустить сервис при необходимости
Разработчик/скриптер:
- Использовать ex в скриптах: ex - file < script
- Тестировать на копии файла
- Логировать изменения и применять idempotent-подход (повторное выполнение не должно ломать)
Обычный пользователь:
- Использовать :p и := для ориентира
- Для больших правок переключаться в :visual
Ментальные модели и эвристики
- Думаете о строках, а не о экране: адресуйте изменения по номерам.
- ex хорош для атомарных, локальных правок и автоматизации.
- Для редактирования контекста (несколько строк вокруг) проще временно печатать диапазон.
Быстрый сравнительный обзор — что выбрать
- ex — минималистично, подходит для линейных правок и скриптов.
- sed — потоковые замены, незаменим в пайплайнах.
- awk — преобразования и аналитика данных в строках.
- vim — интерактивная и эффективная редактура кода.
- nano — простой полноэкранный редактор для новичков.
Примеры использования в реальных задачах
- Быстрое удаление строки с конкретным текстом (с подтверждением):
:g/DELETE_THIS/d- Пакетная нормализация пробелов в диапазоне:
:1,$s/ \+/ /g(Экранируйте синтаксис в зависимости от оболочки)
Decision tree: когда использовать ex
flowchart TD
A[Нужно отредактировать файл?] --> B{Есть ли полноэкранный терминал?}
B -- Да --> C[Используйте vim или nano]
B -- Нет --> D{Требуется автоматизация?}
D -- Да --> E[Используйте ex в скрипте или sed]
D -- Нет --> F[Используйте ex интерактивно]
C --> G[Полноэкранный режим — больше контекста]
E --> H[ex для команд, sed для потоковой обработки]Важные замечания
- Всегда делайте резервную копию перед массовыми изменениями.
- Поведение команд может незначительно отличаться в разных реализациях (POSIX, nvi, vim в режиме ex).
Итоги
ex — простой и надёжный инструмент для редактирования строк и автоматизации правок в UNIX-подобных системах. Он не заменяет современные полноэкранные редакторы для повседневной интерактивной работы, но остаётся полезным при автоматизации и в ограниченных окружениях.
Ключевые действия: открыть файл, распечатать диапазон, вставить/удалить/переместить строки, выполнить глобальную замену и при необходимости перейти в визуальный режим.
Важно: проверьте изменения и сохраняйте резервные копии перед критическими правками.