@ SLM, acho que faz mais sentido fechar o outro Q como um burro disso, já que este é o caso mais amplo.
Graeme
@ Graeme - Eu tenderia a concordar com você, mas o outro também tem a sua resposta, embora não tão bem escrito. Algumas mesclagens podem ser mais adequadas. Talvez devêssemos contar com a ajuda de um mod para ajudar com estes 2? Vou dar um ping nele.
Slm
@ slm, acho que podemos deixar para quem está passando pela fila fechada e deixar a multidão decidir. A principal diferença, a meu ver, é que o outro Q é um caso especial disso em que você deseja apenas uma extremidade do tubo.
Graeme
1
@ Graeme - se não acionarmos a bomba nela, as pessoas provavelmente fecharão o mais novo ao mais velho como um dup.
Slm
Respostas:
11
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 editorcomando, que geralmente é apenas um link simbólico para o editor de linha de comando padrão. Você pode mudar isso alterando o link (usado update-alternativesem sistemas baseados no Debian) ou usando a EDITORvariável ambiental Por exemplo, você poderia fazer:
echo HelloWorld| EDITOR=nano vipe | less
Caso contrário, se o editor de texto específico não tiver suporte para esse tipo de coisa, acho que você está preso à criação manual de um arquivo temporário, gravando o arquivo, executando o editor, inserindo o arquivo no restante do pipeline e removendo o arquivo temporário. O vipecomando basicamente cuida de tudo isso. Isso é legal, mas o comando raramente está disponível por padrão.
O editor de texto joe (aka Joe's Own Editor ) faz o que você deseja.
O comando echo "hello world" | joe - | lessfunciona conforme o esperado, embora precise de aspas por algum motivo.
Alguns comandos (como gpg) produzem uma saída exibida que não entra no canal. Isso corrompe a exibição inicial dentro de joe, mas pressionar ctrl + r - refresh - limpará as coisas.
Se tudo o que você deseja é substituir "Olá" por "Adeus" (ou qualquer outra substituição 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 substituições como esta:
Respostas:
O pacote moreutils tem um ótimo comando para fazer isso, chamado
vipe
. Na página do manual:Por padrão, isso usará o
editor
comando, que geralmente é apenas um link simbólico para o editor de linha de comando padrão. Você pode mudar isso alterando o link (usadoupdate-alternatives
em sistemas baseados no Debian) ou usando aEDITOR
variável ambiental Por exemplo, você poderia fazer:Caso contrário, se o editor de texto específico não tiver suporte para esse tipo de coisa, acho que você está preso à criação manual de um arquivo temporário, gravando o arquivo, executando o editor, inserindo o arquivo no restante do pipeline e removendo o arquivo temporário. O
vipe
comando basicamente cuida de tudo isso. Isso é legal, mas o comando raramente está disponível por padrão.fonte
O editor de texto joe (aka Joe's Own Editor ) faz o que você deseja.
O comando
echo "hello world" | joe - | less
funciona conforme o esperado, embora precise de aspas por algum motivo.Alguns comandos (como gpg) produzem uma saída exibida que não entra no canal. Isso corrompe a exibição inicial dentro de joe, mas pressionar ctrl + r - refresh - limpará as coisas.
fonte
Se tudo o que você deseja é substituir "Olá" por "Adeus" (ou qualquer outra substituição 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 substituições como esta:
Verifique "man sed" para mais detalhes.
fonte