Kopieren Sie einen langen einzeiligen Text von einem Terminal mit unerwünschter Änderungszeile


14

locate ... | less gibt einen langen Pfad aus, der im Terminal als mehrere Zeilen angezeigt wird, obwohl es sich tatsächlich um eine einzelne Zeile handelt.

Ich kopiere den Pfad vom Terminal, indem ich den Text mit der Maus auswähle und Ctrl+ Shift+ drücke C. Wenn ich es in eine Textdatei einfüge, wird im Text eine unerwünschte Änderungszeile angezeigt, genau so, wie sie im Terminal angezeigt wird.

Aber ich erinnere mich, dass ich manchmal eine Ausgabe mit langem Pfad kopieren kann locate ... | less, ohne unerwünschte Zeilenwechsel einzuführen, und manchmal nicht. Mir ist nicht klar, ob ich etwas anders mache.

Ich frage mich also, wie ich sicherstellen kann, dass das Problem nicht auftritt. Vielen Dank!

Mein Betriebssystem: Ubuntu 12.04.

Mein Terminal: Gnome Terminal 3.4.1.1



Aber Strg + Umschalt + C kann manchmal eine lange Zeile kopieren, ohne die Änderungszeile zu kopieren. Immer noch andere Probleme, denke ich.
Tim

In Ihrem Q geht es also mehr darum, warum oder wie Sie dieses Verhalten steuern können.
slm

Ja. Ich kopiere Text aus dem Terminal mit der Tastenkombination (was meiner Meinung nach der schnellste Weg ist), nicht indem ich die Ausgabe in eine Datei
Tim

Gibt es etwas mehr darüber, wann das Verhalten so oder so ist?
slm

Antworten:


3

Anstatt zu kopieren, was auf dem Terminal angezeigt wird (nur was auf den Bildschirm passt, mit), kopieren Sie den tatsächlichen Text. Verwenden Sie eines der externen Dienstprogramme xsel oder xclip (sie haben meistens die gleichen Funktionen, ich werde in dieser Antwort xsel verwenden), um Daten aus oder in die X-Zwischenablage zu kopieren. Übergeben Sie zum Kopieren in die Zwischenablage den gewünschten Inhalt an die Standardeingabe. Beim Einfügen aus der Zwischenablage wird der Inhalt in die Standardausgabe geschrieben.

Verwenden Sie in weniger den |Befehl, um eine Reihe von Zeilen durch einen Befehl zu leiten. Scrollen Sie zur ersten Zeile, auf die Sie reagieren möchten, geben Sie ein mm, um eine Markierung zu setzen, scrollen Sie zur letzten Zeile und geben Sie ein |mxsel -bund drücken Sie Enter. Zwei Markierungen sind vordefiniert: ^für den Anfang der Datei, $für das Ende der Datei. Verwenden Sie daher zum Kopieren der gesamten Datei <|$xsel -b. Verwenden Sie mm|mxsel -bund , um eine einzelne Zeile zu kopieren Enter.

Entfernen Sie die -bOption zum Kopieren in die primäre Auswahl anstelle der Zwischenablage.


3

Das wirkliche Verhalten davon ist das folgende:

Wenn Sie sich in befinden lessund eine Datei mit einer sehr langen Zeile haben, haben Sie beim Kopieren des gesamten Textes mehrere Zeilen, wenn Sie über die lange Zeile nach unten und wieder nach oben scrollen. Wenn Sie danach die geteilten Zeilen über den unteren Rand des Terminals nach unten und die Zeilen wieder nach oben scrollen, werden die Zeilenumbrüche wieder entfernt.

Zur Visualisierung:

Geben Sie hier die Bildbeschreibung ein


2

Sie können kopieren Sie die Zeilen der Ausgabe ohne zusätzliche Zeilenumbrüche (Zeilenumbrüche) , wenn der Text war die Ausgabe direkt zum Terminal.
Das Terminal kann verfolgen, wo sich die tatsächlichen Leitungsenden befinden.

Wenn die Zeilen jedoch von lesseinem ähnlichen pagerProgramm ausgegeben wurden , weiß das Terminal nicht, wo sich die Zeilenumbrüche befinden. Der Pager verwendet das Terminal als Vollbildschirm für Zeichen und teilt dem Terminal mit, dass diese Zeichen dort abgelegt werden sollen, und führt Operationen wie das Scrollen durch. Für das Terminal ist jedoch nicht erkennbar, wo Zeilenumbrüche vorgesehen sind.


2
Ich habe festgestellt, dass ich manchmal die Zeilenumbrüche kopiere und manchmal nicht. Es ist im Laufe der Zeit inkonsistent. Heute passierten beide, als ich locate <something> | lessin zwei verschiedenen Fällen Strg-Umschalt-C von .
Tim

Normalerweise zeichnet Less den Bildschirm selbst, sodass das Terminal nicht sieht, wo die Linien enden. Es kann jedoch weniger konfiguriert werden. Tun Sie nichts für kurze Dateien, die auf den Bildschirm passen. Es ist also möglich, dass der Unterschied zwischen den Fällen darin bestand, dass sich weniger in einem anderen Modus befand. (Schauen Sie sich an echo $LESS, vielleicht gibt es interessante Optionen für weniger.)
Volker Siegel

@ Tim das nervt mich auch schon seit Jahren. Vielleicht deutet die Antwort von @ niknah auf die Ursache hin? Ich wechsle oft zwischen den -SModi, vielleicht macht es das auch noch schlimmer.
Dan Gravell

1
@Tim: Ich habe etwas entdeckt, das auf Ihrem Betriebssystem und weniger Version möglicherweise zutrifft oder nicht: Das Verhalten beim Kopieren hängt davon ab, wie ich in weniger als der Ziellinie angekommen bin. Wenn ich vorwärts suche, enthält die Kopie keine Zeilenumbrüche (dh sie kopiert den ursprünglichen Inhalt der langen Zeilen). Wenn ich jedoch die Datei rückwärts durchsucht habe, um zur Zielzeile zu gelangen, enthält die Kopie die Zeilenumbrüche und teilt die lange Zeile in mehrere separate Zeilen auf. Scheint für mich unter Mac und Linux konsistent zu sein.
erik.weathers

2

In less, wählen Sie, wenn Sie mehrere Zeilen Text eingewickelt und kopieren Sie sie dann, wird es als eine Zeile kommen.

Wenn Sie drücken und PgUpdann denselben Text kopieren, werden mehrere Zeilen angezeigt.

PgDnist in Ordnung, Pfeile sind in Ordnung. Aber PgUpbewirkt , dass der Text aufgespalten werden.


Das ist nicht genau die wahre Ursache des Verhaltens. Siehe meine Antwort: unix.stackexchange.com/a/445590/105308
Bobbel

0

Wenn das Ziel das Kopieren und Einfügen ist, verwende ich catanstelle von lessoder moreund dann erfasst das Terminal es so, wie es tatsächlich ist und nicht so, wie es angezeigt wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.