匹配多个文件时格式化grep的输出

aza*_*ani 6 grep

搜索多个文件时,grep 的输出如下所示:

{FILE}:{MATCH}
Run Code Online (Sandbox Code Playgroud)

这是一个问题,因为如果我双击该{FILE}部分,我至少还会选择(并复制):匹配项和可能的一些匹配项。我怎样才能让 grep 来代替它的输出格式如下:

{FILE} : {MATCH}
Run Code Online (Sandbox Code Playgroud)

基本上,我想在列之前插入一个空格。(以及可选的一个)

o11*_*11c 8

grep -T 将工作 7/8ths 的时间。

% for f in a ab abc abcd abcde abcdef abcdefg abcdefgh; do echo pattern > $f; done
% grep -T pattern *
a      :pattern
ab     :pattern
abc    :pattern
abcd   :pattern
abcde  :pattern
abcdef :pattern
abcdefg:pattern
abcdefgh       :pattern
Run Code Online (Sandbox Code Playgroud)

GNU grep 手册

-T --initial-tab

确保实际行内容的第一个字符位于制表位上,以便制表符的对齐看起来正常。这与他们的前缀输出到实际内容的选项很有用:-H-n,和-b。为了提高来自单个文件的行都从同一列开始的可能性,这也会导致行号和字节偏移量(如果存在)以最小大小的字段宽度打印。


mur*_*uru 6

grep据我所知,这不能单独完成。假设您的文件名中没有 a :

grep ... | sed 's/:/ : /'
Run Code Online (Sandbox Code Playgroud)

只有第一个:会被填充。

当然,你可以告诉grep只打印文件名:

grep -l ...
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 6

就双击选择而言,单词的构成取决于终端(和/或 X 工具包),对于某些终端,可定制。

对于xterm字符按类别(字母、空格...)进行组织,双击可选择同一类别的相邻字符。

那里描述了默认值。在默认情况下,:不是在同一个班作为/自己不在同一个班级为字母或数字。

某些系统通过为like提供资源文件来更改该默认值。xterm/etc/X11/app-defaults/XTerm

在 Linux Mint 系统上,我发现:

! Here is a pattern that is useful for double-clicking on a URL:
*charClass: 33:48,35:48,37-38:48,43-47:48,58:48,61:48,63-64:48,95:48,126:48
Run Code Online (Sandbox Code Playgroud)

这将字符 58 ( :) 和 47 与字母和数字 (48) 放在同一类中。

您可以做的是:通过您自己的资源文件将其更改为保留在自己的类中。

例如,如果您添加:

XTerm*charClass: 33:48,35:48,37-38:48,43-47:48,61:48,63-64:48,95:48,126:48
Run Code Online (Sandbox Code Playgroud)

到您的~/".Xdefaults-$(uname -n)",然后双击文件名将停在:.

你可以用它来试验:

xterm -cc 33:48,35:48,37-38:48,43-47:48,61:48,63-64:48,95:48,126:48
Run Code Online (Sandbox Code Playgroud)

您还可以在三次或四次单击时将不同的选择方法定义为正则表达式。例如

XTerm*on3Clicks: regex [^:]+
Run Code Online (Sandbox Code Playgroud)

将在三次单击时选择非冒号字符序列。