Copia un lungo testo a riga singola da un terminale con una linea di cambio indesiderata


14

locate ... | less genera un lungo percorso, che viene mostrato come più linee nel terminale, sebbene in realtà sia una singola linea.

Copio il percorso dal terminale selezionando il testo con il mouse e premendo Ctrl+ Shift+ C. Quando lo incollo in un file di testo, ottengo una linea di modifica indesiderata nel testo, esattamente nello stesso modo in cui viene mostrato nel terminale.

Ma ricordo che a volte riesco a copiare un output lungo percorso locate ... | lesssenza introdurre cambiamenti di linea indesiderati, ea volte non posso. Non capisco se faccio qualcosa di diverso.

Quindi mi chiedo come assicurarsi che il problema non accada? Grazie!

Il mio sistema operativo: Ubuntu 12.04.

Il mio terminale: Terminale Gnome 3.4.1.1



Ma Ctrl + Maiusc + C può a volte copiare una linea lunga senza copiare la linea di cambiamento. Ancora problemi diversi, penso.
Tim

Quindi il tuo Q è più sul perché o su come controllare questo comportamento?
slm

Sì. Copio il testo dal terminale usando il tasto di scelta rapida (che immagino sia il modo più rapido), non indirizzando l'output su un file
Tim

C'è qualcosa di più riguardo a quando il comportamento è in un modo o nell'altro?
slm

Risposte:


3

Invece di copiare ciò che viene visualizzato sul terminale (solo ciò che si adatta allo schermo, con), copia il testo effettivo. Usa una delle utility esterne xsel o xclip (hanno per lo più le stesse funzionalità, userò xsel in questa risposta) per copiare dati da o negli appunti X. Per copiare negli appunti, passare il contenuto desiderato sull'input standard. Quando si incolla dagli appunti, il contenuto viene scritto nell'output standard.

In meno, utilizzare il |comando per reindirizzare un gruppo di righe attraverso un comando. Scorrere fino alla prima riga su cui si desidera agire, digitare mmper impostare un segno, scorrere fino all'ultima riga e digitare |mxsel -be premere Enter. Sono predefiniti due segni: ^per l'inizio del file, $per la fine del file. Pertanto, per copiare l'intero file, utilizzare <|$xsel -b. Per copiare una singola riga, utilizzare mm|mxsel -be Enter.

Rimuovere l' -bopzione da copiare nella selezione principale anziché negli Appunti.


3

Il vero comportamento di questo è il seguente:

se ci si trova lesse si dispone di un file con una riga molto lunga, quindi se si scorre la riga lunga verso il basso e si scorre indietro, si hanno più righe quando si copia l'intero testo. Dopodiché, quando fai scorrere le linee divise verso il basso sulla parte inferiore del terminale e scorri di nuovo le linee verso l'alto, le interruzioni di linea verranno nuovamente rimosse.

Per la visualizzazione:

inserisci qui la descrizione dell'immagine


2

È possibile copiare le righe di output senza ulteriori newline (interruzioni di riga) se il testo è stato emesso direttamente sul terminale.
Il terminale può tenere traccia di dove si trovano le estremità della linea reale.

Ma se le linee sono state emesse da lesso un pagerprogramma simile , il terminale non sa dove siano le nuove linee. Il cercapersone utilizza il terminale come schermo intero di caratteri e dice al terminale "inserisci questi caratteri" e operazioni come lo scorrimento. Ma, per il terminale, non c'è modo di vedere dove sono destinate le nuove linee.


2
Ho scoperto che a volte copio le interruzioni di riga e altre volte no. È incoerente nel tempo. Oggi sono successe entrambe quando ho premuto Ctrl-shift-c locate <something> | lessin due casi diversi.
Tim

Meno disegna lo schermo stesso, normalmente, in modo che il terminale non veda dove finiscono le linee. Ma meno può essere configurato in realtà non fanno nulla per i file brevi che si adattano all'altezza dello schermo. Quindi è possibile che la differenza tra i casi fosse che meno era in una modalità diversa. (dai un'occhiata echo $LESS, forse ci sono opzioni interessanti per meno.)
Volker Siegel,

@Tim questo mi ha infastidito anche per anni. Forse la risposta di @ niknah suggerisce la causa? Passo spesso da una -Smodalità all'altra , forse forse anche peggio.
Dan Gravell,

1
@Tim: ho scoperto qualcosa che potrebbe o non potrebbe essere vero sul tuo sistema operativo e meno versione: il comportamento della copia varia a seconda di come sono arrivato alla linea di destinazione in meno. Se sto cercando in avanti, la copia non include le nuove righe di wrapping (ovvero, copia il contenuto originale della linea lunga). Tuttavia, se ho cercato indietro nel file per raggiungere la linea di destinazione, la copia include le nuove linee e divide la linea lunga in più linee separate. Per me sembra coerente su Mac e Linux.
erik.weathers

2

In less, se si seleziona avvolto più righe di testo e poi copiarlo, sarà scendere come una riga.

Se premi, PgUpquindi copia lo stesso testo, scenderà come più righe.

PgDnva bene, le frecce vanno bene. Ma PgUpprovoca la suddivisione del testo.


Questa non è esattamente la vera causa del comportamento. Vedi la mia risposta: unix.stackexchange.com/a/445590/105308
bobbel

0

Se l'obiettivo è quello di copiare e incollare, io uso catinvece di lesso moree quindi il terminale lo cattura così com'è invece che come viene visualizzato.

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.