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
Antworten:
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 einmm
, um eine Markierung zu setzen, scrollen Sie zur letzten Zeile und geben Sie ein|mxsel -b
und 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 Siemm|mxsel -b
und , um eine einzelne Zeile zu kopieren Enter.Entfernen Sie die
-b
Option zum Kopieren in die primäre Auswahl anstelle der Zwischenablage.quelle
Das wirkliche Verhalten davon ist das folgende:
Wenn Sie sich in befinden
less
und 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:
quelle
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
less
einem ähnlichenpager
Programm 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.quelle
locate <something> | less
in zwei verschiedenen Fällen Strg-Umschalt-C von .echo $LESS
, vielleicht gibt es interessante Optionen für weniger.)-S
Modi, vielleicht macht es das auch noch schlimmer.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.
quelle
Wenn das Ziel das Kopieren und Einfügen ist, verwende ich
cat
anstelle vonless
odermore
und dann erfasst das Terminal es so, wie es tatsächlich ist und nicht so, wie es angezeigt wird.quelle