Piping-Befehle, ändern Sie stdin write in stdout

8
echo Hello World | nano - | less

Ich möchte Hallo -> Auf Wiedersehen im Texteditor ändern.

Es muss nicht mit Nano sein. Ich bin mit Nano-Lesen festgefahren, aber ich muss in eine Datei schreiben (Schreiben in - erstellt eine Datei mit dem Namen -)

user65660
quelle
@slm, ich denke, es ist sinnvoller, das andere Q als Betrug zu schließen, da dies der umfassendere Fall ist.
Graeme
@ Graeme - Ich würde eher mit Ihnen übereinstimmen, aber der andere hat auch Ihre Antwort, obwohl nicht so gut geschrieben. Einige Zusammenführungen könnten passender sein. Vielleicht sollten wir die Hilfe eines Mods in Anspruch nehmen, um mit diesen 2 zu helfen? Ich werde einen darüber pingen.
slm
@slm, ich denke, wir können es jedem überlassen, der durch die enge Warteschlange geht, und die Menge entscheiden lassen. Der Hauptunterschied, wie ich es sehe, ist, dass das andere Q ein Sonderfall ist, bei dem Sie nur ein Ende des Rohrs wollen.
Graeme
1
@Graeme - Wenn wir die Pumpe nicht ansaugen, wird ppl wahrscheinlich die neuere zur älteren als Dup schließen.
slm

Antworten:

11

Das moreutils- Paket hat dafür einen großartigen Befehl namens vipe. Von der Manpage:

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.

Standardmäßig wird der editorBefehl verwendet, der normalerweise nur ein Symlink zum Standard-Befehlszeileneditor ist. Sie können dies ändern, indem Sie entweder den Link ändern (Verwendung update-alternativesauf Debian-basierten Systemen) oder die EDITORUmgebungsvariable verwenden. ZB könnten Sie tun:

echo Hello World | EDITOR=nano vipe | less

Andernfalls, wenn der jeweilige Texteditor diese Art von Dingen nicht unterstützt, müssen Sie wahrscheinlich keine temporäre Datei manuell erstellen, die Datei darauf schreiben, den Editor ausführen, die Datei in den Rest der Pipeline eingeben und Entfernen der temporären Datei. Der vipeBefehl kümmert sich im Wesentlichen um all dies. Das ist schön, aber der Befehl ist standardmäßig selten verfügbar.

Graeme
quelle
1

Der Texteditor Joe (auch bekannt als Joes eigener Editor ) macht, was Sie wollen.

Der Befehl echo "hello world" | joe - | lessfunktioniert wie erwartet, obwohl er aus irgendeinem Grund die Anführungszeichen benötigt.

Einige Befehle (z. B. gpg) erzeugen eine angezeigte Ausgabe, die nicht in die Pipe gelangt. Dies korrumpiert die anfängliche Anzeige innerhalb von Joe, aber wenn Sie Strg + R - Aktualisieren - drücken, werden die Dinge bereinigt.

Ben Tesch
quelle
1

Wenn Sie nur "Hallo" durch "Auf Wiedersehen" (oder einen anderen Wortersatz) ersetzen möchten, können Sie die manuelle Bearbeitung in einem Editor zugunsten des automatischen Such- und Ersetzungswerkzeugs vermeiden. Zum Beispiel kann "sed" solche Ersetzungen wie folgt durchführen:

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

Überprüfen Sie "man sed" für weitere Details.

ElazarR
quelle