Comandos de tubulação, modifique stdin write para stdout

6
echo Hello World | nano - | less

Eu quero modificar o Hello - > Adeus enquanto no editor de texto.

Não precisa ser com nano. Eu estou preso com nano leitura stdin, mas obrigando-me a escrever em um arquivo (escrevendo para - cria um arquivo chamado -)

    
por user65660 19.04.2014 / 21:11

3 respostas

9

O pacote moreutils tem um ótimo comando para fazer isso, chamado vipe . Na página do manual:

SYNOPSIS
       command1 | vipe | command2

DESCRIPTION
       vipe allows you to run your editor in the middle of a unix pipeline and
       edit the data that is being piped between programs. Your editor will have
       the full data being piped from command1 loaded into it, and when you close
       it, that data will be piped into command2.

Por padrão, isso usará o comando editor , que geralmente é apenas um link simbólico para o editor de linha de comando padrão. Você pode alterar isso alterando o link (use update-alternatives em sistemas baseados no Debian) ou usando a variável EDITOR environment. Por exemplo, você poderia fazer:

echo Hello World | EDITOR=nano vipe | less

Caso contrário, se o editor de texto em particular não tiver suporte para esse tipo de coisa, acho que você está preso criando manualmente um arquivo temporário, gravando o arquivo, executando o editor, inserindo o arquivo no restante o pipeline e removendo o arquivo temporário. O comando vipe basicamente cuida de tudo isso. Isso é legal, mas o comando raramente está disponível por padrão.

    
por 19.04.2014 / 21:40
1

O editor de texto joe (também conhecido como Editor do próprio Joe ) faz o que você quer.

O comando echo "hello world" | joe - | less funciona como esperado, embora precise das cotações por algum motivo.

Alguns comandos (como gpg) produzem uma saída exibida que não entra no pipe. Isso corrompe a exibição inicial dentro de joe, mas pressionar ctrl + r - refresh - limpará as coisas.

    
por 18.01.2015 / 05:20
1

Se tudo o que você quer é substituir "Hello" por "Goodbye" (ou qualquer outro substituto de palavra), você pode evitar a edição manual em um editor em favor da ferramenta de pesquisa e substituição automática. Por exemplo, "sed" pode fazer essas substituições assim:

echo Hello World | sed 's/Hello/Goodbye/' | less

Verifique "man sed" para mais detalhes.

    
por 18.01.2015 / 13:09