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/'