Ex/vim ex-mode e sed são utilitários categoricamente diferentes ou dois programas diferentes para as mesmas tarefas

Ex/vim ex-mode e sed são utilitários categoricamente diferentes ou dois programas diferentes para as mesmas tarefas

Entendo que sed (editor de fluxo) é um editor não interativo útil para scripts e processamento em lote. Eu também entendo que ex e sua invocação do vim: ex-mode são editores de linha para processamento de texto não interativo. Minha pergunta não é de opinião sobre o que é melhor ou mais útil, mas sim se existe algum caso de uso pretendido ou vantagem para o modo ex/ex que o diferencie do sed. A razão pela qual pergunto é para determinar se estou perdendo ao ignorar o ex-mode em favor do sed. Desde já, obrigado.

Responder1

Uma grande diferença entreexesedé que o primeiro (pelo menos na implementação do Vim) lê o arquivo inteiro em umamortecedore opera sobre isso. Considerando que o "s" em sed significatransmissão, ou seja, sed lê o(s) arquivo(s) de entrada linha por linha e os gera em movimento. Portanto, o sed lida facilmente com arquivos muito grandes, enquanto o ex/Vim precisará do espaço de endereço virtual do seu sistema operacional e será consideravelmente mais lento na leitura e gravação.

Então, com o sed, se você precisar manter um contexto das linhas anteriores, você terá que juntá-lo explicitamente aoespaço padrão, ou armazene-o no único disponívelmantenha espaço. Já no ex/Vim, você pode navegar de volta para uma linha anterior ou usar expressões regulares que abrangem várias linhas no buffer. Além disso, não há apenas um únicomantenha espaço, mas váriosregistros nomeadosno Vim (chamadobuffers nomeadosno ex). Então, se um único espaço de armazenamento não for suficiente, você terá que atualizar do sed paraestranho(para manter o aspecto de streaming) ou mude para ex/Vim.

Na prática

Se eu já tenho um arquivo aberto no Vim, naturalmente usomodo expara certas manipulações de texto. :substituteé um dos comandos usados ​​com mais frequência (pelo menos para mim). Muitos ex comandos têm um correspondente (muitas vezes recursivo)macroimplementação; dependendo da tarefa (e preferências/habilidades pessoais), você tende a usar um ou outro com mais frequência.

Para tarefas de automação, prefiro a cadeia de ferramentas // sed; o bom aqui é que você pode começar aos poucos (com sed) e, quando atingir os limites de suas capacidades, poderá facilmente migrar para a próxima ferramenta, que é mais poderosa (mas também mais complexa e maior). Se esta for uma tarefa de automação única, e eu já conheço uma macro bacana ou um plugin do Vim que simplifica bastante a implementação, considero usar o Vim como um utilitário de linha de comando não interativo emawkPerlmodo ex silencioso. Para outras tarefas, isso geralmente não é uma opção por causa das dependências (do Vim, do plugin, minha configuração pessoal).

Resumo

Você pode fazer muitas coisas apenas com sed e nada mais. Se você não é usuário do Vim (especialmente se você usa ooutroeditor, e pode fazer processamento de texto poderoso lá), ex (modo) não é tão importante, mas nunca está longe, já que sua sintaxe está intimamente alinhada com sed, de qualquer maneira.

informação relacionada