Commandes de tuyauterie, modifiez stdin write to stdout

echo Hello World | nano - | less 

Je veux modifier Bonjour -> Au revoir dans l'éditeur de text.

Il ne doit pas nécessairement être avec nano. Je suis coincé avec nano lecture stdin mais exigeant que j'écrive à un dossier (écrivant à – crée un dossier nommé -)

Le package moreutils a une excellente command pour faire cela, appelé vipe . De la page de manuel:

 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. 

Par défaut, cela utilisera la command de l' editor , qui n'est généralement qu'un lien symbolique vers l'éditeur de command line par défaut. Vous pouvez changer cela en modifiant le lien (utilisez update-alternatives sur les systèmes basés sur Debian) ou en utilisant la variable d'environnement EDITOR . Par exemple, vous pourriez faire:

 echo Hello World | EDITOR=nano vipe | less 

Sinon, si l'éditeur de text particulier ne supporte pas ce genre de chose, je pense que vous êtes coincé avec la création manuelle d'un file temporaire, l'écriture du file, l'exécution de l'éditeur, la saisie du file dans le rest du pipeline et supprimant le file temporaire. La command vipe prend essentiellement en charge tout cela. C'est sympa, mais la command est rarement disponible par défaut.

L'éditeur de text joe (alias Joe's Own Editor ) fait ce que vous voulez.

La command echo "hello world" | joe - | less echo "hello world" | joe - | less echo "hello world" | joe - | less fonctions comme prévu, bien qu'il ait besoin des citations pour une raison quelconque.

Certaines commands (telles que gpg) produisent une sortie affichée qui n'entre pas dans le tube. Cela corrompt l'affichage initial à l'intérieur de joe, mais bash ctrl + r – refresh – va nettoyer les choses.

Si vous voulez replace "Bonjour" par "Au revoir" (ou tout autre rlocation de mot), vous pouvez éviter l'édition manuelle dans un éditeur en faveur de l'outil de search et de rlocation automatique. Par exemple "sed" peut faire de tels rlocations comme ceci:

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

Vérifiez "man sed" pour plus de détails.