Come copio il testo dal mio xterm senza mouse?
-
10-07-2019 - |
Domanda
Voglio usare parte dell'output di un comando eseguito dalla riga di comando in un altro xterm o come parte di un comando diverso. Ad esempio:
> grep error error.log
error: can't find file ~/<some very long path>/thisfile
e voglio farlo:
>ls ~/<some very long path>/
Conosco due modi per farlo:
1. copia ~/<some very long path>/
con il mouse.
2. usa una combinazione di head
/ tail
/ awk
/ sed
/ perl
/ cut
/ etc ... per estrarre solo ciò di cui ho bisogno dall'output e quindi usa che nei backtick.
Esiste un modo per copiare il testo senza usare il mouse? L'esempio che viene in mente è la modalità visiva all'interno di VIM, ma non so come farlo all'interno di xterm.
Soluzione
Puoi usare i comandi copia e incolla della schermata GNU.
Tutorial rapido:
- Apri schermo:
screen
(oscreen myprog my args here
) - Esegui il tuo programma, producendo l'output che desideri copiare
- Entra in modalità copia: Control+a+[
- Sposta il cursore sul punto iniziale
- Premi Invia
- Sposta il cursore sul punto finale
- Premi Invia
- Incolla: Control+a+×
Lo schermo è molto più potente di quello (lo uso per tabulare diversi terminali virtuali senza la necessità di un emulatore di terminale speciale, e anche per non perdere le sessioni quando X si blocca o qualcosa del genere). Per uscire dallo schermo, basta terminare la sessione della shell o digitare Ctrl + a , Ctrl + \ .
Altri suggerimenti
Trovo che XSel sia utile in situazioni simili. È uno strumento che manipola la selezione X. Ad esempio, questo memorizzerà l'output del comando negli Appunti:
grep error error.log | xsel -bi
Puoi anche utilizzare tmux
che ha funzionalità simili a screen
. Una volta che sei in <=> e hai l'output che vuoi copiare, puoi fare quanto segue per copiarlo e incollarlo:
- Entra in modalità copia con Ctrl + B , [
- Sposta il cursore con i tasti freccia e quindi avvia la selezione con Ctrl + Spazio
- Sposta il cursore per selezionare il testo / la regione da copiare, quindi copia con Alt + W (questo ti farà uscire immediatamente dalla modalità copia)
- Ora puoi incollare (solo entro <=>) usando Ctrl + B , ×
Queste istruzioni presuppongono che le associazioni di tasti emacs siano abilitate. Per i collegamenti vi consulta questo confronto o segui semplicemente questa guida dettagliata.
L'OP ha detto che non voleva farlo, ma ecco un modo util di unix per farlo per i posteri. Se impari queste piccole utility unix, possono essere abbastanza potenti.
ls $ (dirname $ (errore grep error.log | head -1 | cut -d " " -f 5-))
nota: sintassi dalla memoria
È possibile inviare l'output direttamente allo xterm interessato utilizzando il dispositivo xterm n. Ecco il comando
xyz$ls /home/ankit/documents/etc/x/y/z > /dev/pts/0
(o watever è il nome del dispositivo, puoi ottenerlo usando il comando 'w' per xterm aperto)
Provalo & amp; spero che questo possa risolvere il tuo problema.