当搜索多个文件时,grep 的输出如下所示:
{FILE}:{MATCH}
这是一个问题,因为如果我双击该{FILE}
部分,我至少还会选择(并复制)该部分,:
可能还选择一些匹配项。我怎样才能让 grep 格式化其输出,如下所示:
{FILE} : {MATCH}
基本上,我想在列之前插入一个空格。 (可选后一项)
答案1
grep -T
7/8 的时间都可以工作。
% 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
来自GNU grep 手册:
-T
--initial-tab
确保实际行内容的第一个字符位于制表位上,以便制表符的对齐方式看起来正常。这对于将其输出前缀为实际内容的选项很有用:
-H
、-n
和-b
。为了提高单个文件中的行全部从同一列开始的概率,这也会导致行号和字节偏移量(如果存在)以最小大小的字段宽度打印。
答案2
grep
据我所知,这本身无法完成。假设您的文件名:
中没有:
grep ... | sed 's/:/ : /'
仅第一个:
将被填充。
当然,您可以grep
只打印文件名:
grep -l ...
答案3
什么构成了单词就双击选择而言,取决于终端(和/或 X 工具包),并且对于某些终端,可以自定义。
为了xterm
,字符组织在类(字母、空格...)并双击选择同一类的相邻字符。
默认有描述那里。在默认情况下,:
是不是与其/
本身属于同一类别,但与字母或数字不属于同一类别。
有些系统通过提供一个来改变默认值资源文件对于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
这将字符 58 ( :
) 和 47 与字母和数字 (48) 归为同一类。
您可以做的就是:
通过您自己的资源文件将其更改为保留在自己的类中。
例如,如果您添加:
XTerm*charClass: 33:48,35:48,37-38:48,43-47:48,61:48,63-64:48,95:48,126:48
到您的~/".Xdefaults-$(uname -n)"
,然后双击文件名将停在:
.
您可以通过以下方式进行实验:
xterm -cc 33:48,35:48,37-38:48,43-47:48,61:48,63-64:48,95:48,126:48
您还可以将三次或四次单击的不同选择方法定义为正则表达式。例如
XTerm*on3Clicks: regex [^:]+
将选择非冒号字符的序列三击。
答案4
这是非常低效的,因为它会导致grep
为每个输入文件生成一个新进程,但是:
给定一个文件列表(例如,*
),执行
对于 f 在文件列表 做 grep --label="$f" --with-文件名图案<“$f” 完毕
--label=string
实际上,“读取标准输入时,假设输入文件名是string
”。
--with-filename
(-H
简称)说,“打印每场比赛的文件名。”当有多个文件需要搜索时,这是默认设置。 IMNSHO,当您指定 时,它也应该默认打开--label
,但它似乎不是这样工作的。由于我的代码(上面)在参数中的文件名中添加了一个空格--label
,因此您得到的输出看起来像
文件名:线匹配模式 ⁞
如果您的文件名来自find
,请执行
寻找(路径...)(表达式)-exec sh -c 'grep --label="$1" -H图案< "$1"' sh {} ";"