如何在不使用鼠标的情况下从我的xterm复制文本?

我想在另一个xterm命令行中使用命令的一部分输出,或者作为其他命令的一部分。 例如:

> grep error error.log error: can't find file ~/<some very long path>/thisfile 

我想这样做:

 >ls ~/<some very long path>/ 

我知道两种方法来做到这一点:
1.复制~/<some very long path>/用鼠标。
2.使用head / tail / awk / sed / perl / cut / etc的一些组合来从输出中只提取我需要的内容,然后使用里面的反引号。

有没有办法复制文本,而不使用鼠标? 我想到的例子是VIM内部的可视化模式,但是我不知道如何在xterm中做到这一点。

您可以使用GNU屏幕的复制和粘贴命令。

快速教程:

  1. 打开屏幕: screen (或screen myprog my args here
  2. 运行你的程序,产生你想复制的输出
  3. 进入复印模式:^ A [
  4. 将光标移到起点
  5. 点击进入
  6. 将光标移动到终点
  7. 点击进入
  8. 粘贴:^ A]

屏幕比这更强大(我使用它来选择几个虚拟终端,而不需要特殊的终端模拟器,而且当X崩溃或什么的时候我也不会松动我的会话)。 要退出屏幕,只需结束shell会话,或者键入^ A ^。

我发现XSel在类似情况下很有用。 这是一个操纵X选择的工具。 例如,这会将您的命令的输出存储到剪贴板:

 grep error error.log | xsel -bi 

您也可以使用具有类似功能的 tmux进行screen 。 一旦你在tmux ,你有你想要复制的输出,你可以执行以下操作来复制并粘贴:

  1. 使用Ctrl + B进入复制模式, [
  2. 用箭头键移动光标,然后用Ctrl + Space开始选择
  3. 移动光标选择要复制的文本/区域,然后用Alt + W复制(这将立即退出复制模式)
  4. 现在可以使用Ctrl + B粘贴(仅在tmux ), ]

这些instructiuons假定emacs键绑定启用。 对于vi的绑定看看这个比较,或者只是按照这个分步指南。

OP说他不想这样做,但是这是一个为后代做的unix utils方法。 如果你学习这些小的Unix工具,它们可以非常强大。

ls $(dirname $(grep error error.log | head -1 | cut -d“”-f 5-))

注意:内存中的语法

您可以使用xterm设备编号直接将输出发送到有关的xterm。 这是命令。

 xyz$ls /home/ankit/documents/etc/x/y/z > /dev/pts/0 

(或watever是设备名称,您可以使用命令'w'来打开xterm)

试试吧,希望这可以解决你的问题。