Comandi di piping, modifica stdin write su stdout


8
echo Hello World | nano - | less

Voglio modificare Hello -> Arrivederci nell'editor di testo.

Non deve essere con nano. Sono bloccato con la lettura nano di stdin ma mi impone di scrivere su un file (scrivendo su - crea un file chiamato -)



@slm, penso che abbia più senso chiudere l'altro Q come un inganno in quanto questo è il caso più ampio.
Graeme,

@Graeme - Tenderei ad essere d'accordo con te, ma anche l'altro ha la tua risposta, sebbene non sia scritto bene. Alcune fusioni potrebbero essere più appropriate. Forse dovremmo chiedere l'aiuto di una mod per aiutare con questi 2? Ne eseguo un ping.
slm

@slm, penso che possiamo lasciarlo a chiunque stia attraversando la coda stretta e lasciare che la folla decida. La differenza principale, a mio modo di vedere, è che l'altro Q è un caso speciale in cui si desidera solo un'estremità del tubo.
Graeme,

1
@Graeme - se non eseguiamo il priming della pompa su di essa, probabilmente ppl chiuderà il più nuovo al più vecchio come duplex.
slm

Risposte:


11

Il pacchetto moreutils ha un ottimo comando per farlo, chiamato vipe. Dalla pagina man:

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.

Per impostazione predefinita, questo utilizzerà il editorcomando, che di solito è solo un link simbolico all'editor della riga di comando predefinito. Puoi cambiarlo modificando il collegamento (usa update-alternativessu sistemi basati su Debian) o usando la EDITORvariabile ambientale. Ad esempio, potresti fare:

echo Hello World | EDITOR=nano vipe | less

Altrimenti, se il particolare editor di testo non supporta questo tipo di cose, penso che tu sia bloccato con la creazione manuale di un file temporaneo, la scrittura del file in quello, l'esecuzione dell'editor, l'inserimento del file nel resto della pipeline e rimozione del file temporaneo. Il vipecomando prende praticamente cura di tutto questo. Questo è carino, ma il comando è raramente disponibile per impostazione predefinita.


1

L'editor di testo joe (aka Joe's Own Editor ) fa quello che vuoi.

Il comando echo "hello world" | joe - | lessfunziona come previsto, sebbene abbia bisogno delle virgolette per qualche motivo.

Alcuni comandi (come gpg) producono un output visualizzato che non entra nella pipe. Questo corrompe la visualizzazione iniziale all'interno di joe, ma premendo ctrl + r - aggiorna - pulirai le cose.


1

Se tutto ciò che vuoi è sostituire "Ciao" con "Arrivederci" (o qualsiasi altra sostituzione di parole) puoi evitare la modifica manuale in un editor a favore dello strumento di ricerca e sostituzione automatica. Ad esempio "sed" può eseguire tali sostituzioni in questo modo:

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

Controlla "man sed" per maggiori dettagli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.