Являются ли ex/vim ex-mode и sed категорически разными утилитами или двумя разными программами для одних и тех же задач?

Являются ли ex/vim ex-mode и sed категорически разными утилитами или двумя разными программами для одних и тех же задач?

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

решение1

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

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

На практике

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

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

Краткое содержание

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

Связанный контент