从终端复制不需要的换行符的长单行文本


14

locate ... | less 输出一条长路径,虽然实际上是一条线,但在终端中显示为多条线。

我通过使用鼠标选择文本并单击Ctrl+ Shift+ 从终端复制路径C。当我将其粘贴到文本文件中时,在文本中会出现不需要的更改行,与在终端中显示的完全相同。

但是我记得有时可以复制的长路径输出locate ... | less,而不会引入不必要的换行,有时则不能。我不知道我是否做不同的事情。

因此,我想知道如何确保该问题不会发生?谢谢!

我的操作系统:Ubuntu 12.04。

我的终端机:Gnome终端机3.4.1.1



但是Ctrl + Shift + C有时可以复制长行而不复制更改行。我认为仍然存在不同的问题。
蒂姆

因此,您的问题更多是关于为什么或如何控制此行为?
slm

是。我复制文本出使用快捷键(我想是最快捷的方式)所述终端的,而不是由输出引导到一个文件

当行为是一种方式而另一种方式时,还有其他更多信息吗?
slm

Answers:


3

复制实际的文本,而不是复制终端上显示的内容(仅显示屏幕上显示的内容)。使用外部实用程序xselxclip(它们具有几乎相同的功能,我将在此答案中使用xsel)之一将数据复制到X剪贴板或从X剪贴板复制到X剪贴板。要复制到剪贴板,请在标准输入上传递所需的内容。从剪贴板粘贴时,内容将写入标准输出。

在更少的内容中,使用|命令通过命令通过管道传送一堆线。滚动到要操作的第一行,键入mm以设置标记,滚动到最后一行,然后键入|mxsel -b并按Enter。预定义了两个标记:^用于文件的开头,$用于文件的结尾。因此,要复制整个文件,请使用<|$xsel -b。要复制一行,请使用mm|mxsel -bEnter

删除-b复制到主要选择而不是剪贴板的选项。


3

其实际行为如下:

如果您在其中less并且文件的行很长,则在复制整个文本时,如果向下滚动并向上滚动,则多行。之后,当您在终端的底部向下滚动拆分的线并再次向上滚动时,换行符将再次被删除。

为了可视化:

在此处输入图片说明


2

如果文本直接输出到终端,则可以复制输出行而无需多余的换行符(换行符)。 终端可以跟踪真实行的结束位置。

但是,如果这些行是由less或类似pager程序输出的,则终端不知道换行在哪里。寻呼机将终端用作字符的全屏显示,并告诉终端“将这些字符放在那里”和诸如滚动之类的操作。但是,对于终端而言,无法查看换行的目的。


2
我发现有时候我会复制换行符,有时候我不会。跨时间不一致。今天,当我locate <something> | less在两种不同的情况下Ctrl-shift-c时都发生了这两种情况。
蒂姆(Tim)

通常,Less会绘制其屏幕本身,这样终端就看不到行的结尾。但是对于配置适合屏幕heigt的短文件,可以进行的配置实际上很少起作用。因此,案例之间的差异可能在于,在不同模式下的案例更少。(看看echo $LESS,也许有一些有趣的选择可能更少。)
Volker Siegel 2014年

@Tim这也困扰了我很多年。也许@niknah的答案表明了原因?我经常在-S模式之间进行切换,因此也许也会使情况变得更糟。
Dan Gravell

1
@Tim:我发现在您的OS及以下版本中可能存在或不存在的某些事情:复制行为取决于我如何以更少的方式到达目标行。如果我正在向前搜索,则该副本不包含换行符(即,它复制了原始的长行内容)。但是,如果我向后搜索文件以到达目标行,则副本将包括换行符,并将长行拆分为多行。对我来说,在Mac和Linux上似乎是一致的。
erik.weathers 18-3-14

2

在中less,如果您选择将多行文字换行然后将其复制,则该文字会下降为一行。

如果按PgUp然后复制相同的文本,它将以多行显示。

PgDn很好,箭头也很好。但是PgUp导致文本被拆分。


那不是行为的真正原因。见我的回答:unix.stackexchange.com/a/445590/105308
bobbel

0

如果目标是复制和粘贴,则我使用cat而不是lessmore,然后终端将按实际情况而不是按显示方式捕获它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.