Commandes de tuyauterie, modifiez l'écriture stdin en stdout

8
echo Hello World | nano - | less

Je souhaite modifier Bonjour -> Au revoir dans l'éditeur de texte.

Cela ne doit pas nécessairement être avec nano. Je suis coincé avec la nano lecture de stdin mais j'oblige à écrire dans un fichier (écrire dans - crée un fichier nommé -)

user65660
la source
@slm, je pense qu'il est plus logique de fermer l'autre Q en dupe puisque celui-ci est le cas plus large.
Graeme
@Graeme - J'aurais tendance à être d'accord avec vous mais l'autre a aussi votre réponse, mais pas aussi bien écrite. Certaines fusions pourraient être plus appropriées. Peut-être que nous devrions demander l'aide d'un mod pour aider avec ces 2? J'en cinglerai un.
slm
@slm, je pense que nous pouvons laisser cela à quiconque traverse la file d'attente étroite et laisser la foule décider. La principale différence que je vois est que l'autre Q est un cas particulier de cela où vous ne voulez qu'une seule extrémité du tuyau.
Graeme
1
@Graeme - si nous n'amorçons pas la pompe, alors ppl fermera probablement le plus récent au plus ancien en tant que dup.
slm

Réponses:

11

Le paquet moreutils a une grande commande pour ce faire, appelée vipe. Depuis 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 editorcommande, qui n'est généralement qu'un lien symbolique vers l'éditeur de ligne de commande par défaut. Vous pouvez changer cela en modifiant le lien (utilisation update-alternativessur les systèmes basés sur Debian) ou en utilisant la EDITORvariable d'environnement. Par exemple, vous pourriez faire:

echo Hello World | EDITOR=nano vipe | less

Sinon, si l'éditeur de texte particulier ne prend pas en charge ce genre de chose, je pense que vous êtes coincé avec la création manuelle d'un fichier temporaire, l'écriture du fichier, l'exécution de l'éditeur, l'entrée du fichier dans le reste du pipeline et suppression du fichier temporaire. La vipecommande s'occupe essentiellement de tout cela. C'est bien, mais la commande est rarement disponible par défaut.

Graeme
la source
1

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

La commande echo "hello world" | joe - | lessfonctionne comme prévu, bien qu'elle ait besoin des guillemets pour une raison quelconque.

Certaines commandes (telles que gpg) produisent une sortie affichée qui n'entre pas dans le tuyau. Cela corrompt l'affichage initial à l'intérieur de Joe, mais appuyer sur Ctrl + R - Actualiser - nettoiera les choses.

Ben Tesch
la source
1

Si tout ce que vous voulez est de remplacer "Bonjour" par "Au revoir" (ou tout autre remplacement de mot), vous pouvez éviter l'édition manuelle dans un éditeur au profit de l'outil de recherche et remplacement automatique. Par exemple, "sed" peut effectuer de tels remplacements comme ceci:

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

Consultez "homme sed" pour plus de détails.

ElazarR
la source