piping através de um editor estilo headless vi

0

Eu sei vi bem. Eu realmente gostaria de usá-lo quando estou passando na linha de comando.

Existe uma maneira fácil de canalizar o stdout de um processo para uma versão sem cabeça do tipo vi e depois para stdout?

Algo parecido com isto:

$ uname -a | <headless_vi> "3f D"
Linux robbie 4.8.13-1-ARCH
    
por Robbie Wxyz 02.01.2017 / 08:19

1 resposta

0

Como aponta @JdeBP, é melhor usar o editor de fluxo sed ou talvez apenas cut :

$ uname -a | cut -d ' ' -f 1-3
OpenBSD box 6.0

Ou, se você cortar a edição completamente,

$ uname -snr
OpenBSD box 6.0

O problema com vi é que ele não tem um modo de edição de fluxo. O editor de linha ex tem um "modo em lote", mas isso raramente é usado e, como qualquer outro editor de linhas, não pode ser feito para "mover o cursor para frente e para trás" em uma linha.

sed é uma versão do editor de fluxo do editor de linhas ed , especificamente adaptada para aplicar scripts de edição aos fluxos. O editor vi é a versão do editor de tela do editor de linha ex , e o editor ex é um desenvolvimento adicional de ed .

A sequência de comandos vi 3f␣ passaria para a 3ª (espaço) em uma linha e a seguinte D excluiria o restante da linha. Prático, se você tiver recursos de edição de tela.

Em ed , sed e ex , você adiciona linhas, exclui linhas ou altera linhas, com "linhas" significando "linhas inteiras por vez". Para fazer o equivalente em ed ou ex , assumindo que estamos na linha correta no buffer, você diria ... bem, você teria que criar um padrão de expressão regular e uma string de substituição e usá-los com o comando s editing para alterar a linha, que neste caso não é trivial.

Com sed , isso tomaria a forma

$ uname -a | sed 's/PATTERN/REPLACEMENT/'
    
por 02.01.2017 / 10:57

Tags