如何将多页文本从终端复制到剪贴板?


13

我正在查看机器上软件的手册页,我需要复制粘贴其中一些文本,但是该文本不只一页。我知道我可以将输出定向到文件,并使用基于UI的软件(例如gedit)复制所需的文本。但这可以从终端完成吗?

约瑟夫建议使用命令行方法(对我来说有点复杂,在Linux上使用正则表达式还不够好)。但是我想知道是否仍然可以使用鼠标在终端上执行此操作

我希望能得到一个通用的答案,但是,我正在使用Ubuntu。

Answers:


9

我有一些不完善但可能有用的想法。

方法1-笨拙。

使用终端滚动条。

详细信息(假设xterm;其他终端需要进行调整。)

  1. 启用滚动条(如果尚未启用)。(在中xterm,它在您通过Ctrl + Button2获得的菜单中。)
  2. 确保less未与该-c选项一起运行(我的LESS环境变量中启用了此选项,但它会干扰我们将要执行的操作,因此必须键入-c将其关闭。)
  3. 使用less您喜欢的任何命令,向上或向下滚动,使要复制的第一行在屏幕上可见。
  4. Triple-Button1您选择的起始行将其选中。
  5. 向下滚动,直到您要复制的最后一行在屏幕上可见。您只能使用空格键或其他简单的滚动键,而不能进行/搜索-此处的目的是less将所有行发送到终端,以便可以复制它们。
  6. 您选择的结束线上的Button3可以扩展选择范围。

可能的困难:您的回滚缓冲区可能不够大。可以xterm使用saveLines资源或-sl命令行选项更改它,但是我不知道在已经运行的xterm中更改它的方法。

方法2-非鼠标。

使用|(管道)命令less将文本发送到xclip

细节:

  1. 使用less您喜欢的任何命令,向上或向下滚动,将要复制的最后一行放置在屏幕顶部。如果要一直复制到最后,可以跳过此步骤和下一步。
  2. 使用m(mark)命令在您选择的结束位置设置一个标记。标记本身就是一个有用的功能,您应该已经从中了解了标记,vi但是以防万一您不知道这些mx标记:设置标记,其中x可以是任何字母,然后再'x返回您那里。
  3. 现在向上滚动,使要复制的第一行位于屏幕顶部。
  4. 使用pipe命令:|x将会提示您输入外部命令。该x字母应该与您在m命令中使用的标记字母相同,或$与“一直到结尾”相同。键入xclip那里。

复制整个手册页的简单情况减少为g|$xclipEnter

警告(即发生在我身上的可怕事情):xclip将是半背景,作为less进程组的一部分运行。如果尝试暂停less,请在同一终端上启动另一个作业,然后将其粘贴到该作业中,它将无法正常工作。然后,当您稍后将man/ less作业前景化时,粘贴将突然通过。我认为这应该被视为xclip错误...


2
如果Mac用户未安装xclip,则可以使用pbcopy。
Mike Hedman '18

3

像这样的终端多路复用器tmuxscreen通常具有类似的功能(即,将回滚缓冲区的一部分保存到文件或通过管道传递给某些命令),无论如何,使用它们通常是一个好主意,因此,您可能要看看其中的一个。


2

Nixcraft所述

  1. 得到xclip

    sudo apt-get install xclip 
    

    要么

    yum install xclip
    

    在基于RPM的系统上。

  2. man man | your_magic_here | xclip -selection clipboard
  3. Ctrl+ V满足您的内心需求。您可以-selection clipboard通过单击鼠标中键来删除选择粘贴(称为主要选择)。

请注意,这your_magic_here是一个文本过滤器(sed/ awk/ perl/ ...)的占位符,该文本过滤器根据您的特定用例选择了手册页的所需部分,您没有对其进行描述,因此恐怕我无法具体说明举个例子。


除了xclip那里xsel(还有其他)。您可能还想看看此剪贴板讨论
彼得,2014年

有办法使用鼠标吗?这样,当鼠标到达页面末尾时,页面将滚动。
穆罕默德·盖尔巴纳

0

这取决于您的终端程序,但是大多数终端程序不具有保存所选文本的功能。

LXTerminal,uxterm,Konsole和GNOME Terminal似乎都缺乏此“功能”,但可能还有其他人具有该功能。查看终端程序的菜单结构,可能会出现类似“保存所选内容”的内容


0

假设您使用gnome-terminalless作为寻呼机man可以:

  • 运行lessman-X键禁用备用屏幕,例如:LESS=-X man less

这将允许将输出追加man到终端仿真器历史记录缓冲区。请参阅此答案以获取更多详细信息/unix//a/38638/87918

  • 滚动到要复制的文本的最后一页。(所有滚动的文本将在滚动时保存在历史记录缓冲区中)
  • gnome-terminal从最后一页到第一页,用鼠标选择文本,将鼠标拖动到窗口的上边缘。文本选择的详细过程描述在这里

这在Gnome Terminal中不起作用。相反,您要做的是使用鼠标左键开始选择,并在选择时将鼠标光标拖到窗口边缘(或窗口外部)。GT将为您滚动内容,从而扩展选择范围。GT的滚动速度足够快,这是一个相当方便和直观的过程,可以说比xterm更好。

  • 现在,您已经选择了文本(无论您想要什么页面),您都可以在任意位置复制和粘贴文本。

0

使用| (管道)命令中的标记较少,如Wumpus Q. Wumbley在其第二个选项中所回答的那样,但是使用tee重定向以将其追加到已经存在的现有文件中,以达到以下目的:

|tee >> ~/helpaggregator.txt

我建议使用一个现有文件,因为在学习新命令时通常需要查阅该文件,并且喜欢将其合并。此外,制表符补全非常方便。

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.