如何在 less 中复制匹配的行?

如何在 less 中复制匹配的行?

我想在less中复制太长的匹配行,无法用鼠标选择,那么less中是否存在另一种方法?例如

文件:test.txt 内容为:

line1: 12312sdfas23414123
liie2: aaaaaxxxxxxxxxxxxxxxxxxxxxxxfsdfsdfasdf
sdfasdfasdfadsfasdfdfdfd........
line3: 134sdgas1212

我将首先搜索“aaaaa”,然后如何将该行复制到剪贴板?经过搜索,我发现了这个https://stackoverflow.com/questions/26626910/copy-specific-line-from-less,但我不知道如何将其应用于我的要求。提前致谢

更新:有一些本地方法吗?因为我发现我的Centos 6没有安装xclip或pbcopy。

答案1

less有一个v命令将运行编辑器并为其提供文件名和当前行号。您可以使用以下命令覆盖它运行的命令:

export LESSEDIT='sed -n "%lp" %g | xclip -selection clipboard'

现在,当您键入 时v,它将用于sed打印 (p) 当前文件 (%g) 中的当前行 (%l),并将其通过管道传输到 中xclip。您可以编写一个小型 shell 脚本(例如myless)来保存此设置并less为您运行:

#!/bin/bash
export LESSEDIT='sed -n "%lp" %g | xclip -selection clipboard'
exec less "$@"

不要忘记chmod +x myless使其可执行,并将其放在 PATH 目录中的某个位置。

答案2

您发送的链接有答案,但我可以包含您可能正在寻找的确切序列:

执行此操作的命令less是:

  1. /aaaaax <enter>
  2. | <enter>
  3. head -1 | xclip -selection clipboard <enter>

这就是这些命令所说/所做的

  1. 搜索字符串“aaaaax”,该字符串会将其放置在页面/屏幕的顶部
  2. “管”标记。enter在没有明确标记的情况下按下只会传输此屏幕的内容
  3. head -1将输入修剪为仅第一行。在这种情况下我们想要的线
  4. xclip -selection clipboard将该行放在系统剪贴板上,您可以将其粘贴到任何地方

答案3

如果您不必依赖,less我建议使用grep.

您可以使用 过滤输出,grep并且可以更快地找到您的字符串。

相关内容