Я понимаю, что sed (потоковый редактор) - это неинтерактивный редактор, который полезен для сценариев и пакетной обработки. Я также понимаю, что ex и vim вызывают: ex-mode - линейные редакторы для неинтерактивной обработки текста. Мой вопрос не о мнении относительно того, что лучше или полезнее, а о том, есть ли какой-то предполагаемый вариант использования или преимущество ex/ex-mode, которое отличает его от sed. Причина, по которой я спрашиваю, состоит в том, чтобы определить, пропускаю ли я, игнорируя экс-режим в пользу sed. Заранее спасибо.

1 ответ1

1

Одно из основных отличий между ex и sed заключается в том, что первый (по крайней мере, в реализации Vim) считывает весь файл в буфер и работает с ним. Принимая во внимание, что "s" в sed обозначает потоковую передачу, то есть sed читает строку (и) входного файла (ов) построчно и выводит его на ходу. Поэтому sed легко обрабатывает очень большие файлы, тогда как ex / Vim потребуется виртуальное адресное пространство вашей операционной системы и будет значительно медленнее читать и писать.

Таким образом, с помощью sed, если вам нужно сохранить контекст из предыдущих строк, вы должны явно соединить его с пространством шаблона или сохранить его в единственном доступном пространстве хранения. Принимая во внимание, что в ex / Vim вы можете вернуться к предыдущей строке или использовать регулярные выражения, которые занимают несколько строк в буфере. Кроме того, в Vim есть не только один пробел, но и несколько именованных регистров (называемых именованными буферами в ex). Таким образом, если одного места для хранения недостаточно, вам нужно перейти с sed на awk (для поддержки потоковой передачи) или переключиться на ex / Vim.

На практике

Если у меня уже есть файл, открытый в Vim, я, естественно, использую режим ex для определенных манипуляций с текстом. :substitute - одна из наиболее часто используемых команд (по крайней мере, для меня). Многие ex-команды имеют соответствующую (часто рекурсивную) реализацию макроса ; В зависимости от задачи (и личных предпочтений / способностей), вы склонны использовать один или другой чаще.

Для задач автоматизации я предпочитаю цепочку инструментов sed / awk / Perl ; приятно то, что вы можете начать с малого (с помощью sed), и как только вы достигнете пределов его возможностей, вы можете довольно легко перейти к следующему инструменту, который является более мощным (но также более сложным и большим). Если это одноразовая задача автоматизации, и я уже знаю об изящном макросе или плагине Vim, который значительно упрощает реализацию, я считаю использование Vim неинтерактивной утилитой командной строки в режиме без вывода сообщений. Для других задач это обычно не вариант из-за зависимостей (для Vim, плагина, моей личной конфигурации).

Резюме

Вы можете делать много всего с помощью sed, и ничего больше. Если вы не пользователь Vim (особенно если вы используете другой редактор и можете выполнять там мощную обработку текста), ex (mode) не так важен, но никогда не далеко, поскольку его синтаксис в любом случае тесно связан с sed. ,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .