使用从grep到更少的管道时获得彩色结果


246

我经常使用grep的--colour选项,但我也经常减少使用。如何将grep结果减少到更少的程度,并且仍然保留着色。(或者这可能吗?)

grep "search-string" -R * --colour | less 

编辑:

我正在寻找直接的解决方案或与此等效的任何方法。



怎么*办?从grep的手册页:*: The preceding item will be matched zero or more times.但是我还是不明白..!@JeremyPowell
— 砂眼

Answers:


274

当您简单运行时,grep --color它暗示着grep --color=auto哪个会检测输出是否为终端,如果是,则启用颜色。但是,当它检测到管道时,它将禁用着色。以下命令:

grep --color=always -R "search string" * | less

将始终启用着色并覆盖自动检测功能,您将在中获得突出显示的颜色less。

编辑:尽管使用该方法less对我来说是可行的,但是较旧的版本可能需要-R标记来处理颜色,如此处建议的那样。


143
您需要使用less -R颜色编码来解释不正确
— 从

1
它适用于just less,可能取决于版本。
— drrlvn

1
(希望)有用的附录:我需要排除一些匹配项,但要保持颜色不变,因此我最终得到了grep pattern file | grep -v badpattern | grep --colour=always pattern | less -R,完全满足了我的需求。(再次感谢!)
— 欧文·布莱克

7
我不敢相信他们只是在其中实现了颜色处理功能less,因此错过了使用特殊colorless工具的机会。仅就名称而言,它应该已经完成​​!我可能应该编写一个补丁,当二进制文件以方式运行时,该补丁会自动调用-R colorless。
— 基督教徒

2
@OwenBlacker可能不是别名。您可能已经$LESS设置了-R。
— greyfade

27

您可以将其放入.bashrc文件中:

export GREP_OPTIONS="--color=always"

或创建如下别名:

alias grepc="grep --color=always"

并且您将需要使用的-R选项less,如此处所指出的


29
警告!:GREP_OPTIONS =“-color = always”可能会破坏许多使用grep(或(e | f)grep)的脚本。
— mctylr 2010年

4
是的,最好只是给grep加上别名。你总是可以得到纯净的grep与GREP,或覆盖--color手动选项。
— asmeurer 2011年

这对我不起作用,不过别名确实起作用。
— saeedgnu 2014年

9

在这种情况下,我更喜欢实际创建小的sh文件并将其放在上/usr/local/bin。
我通常grep以递归方式在上使用pwd,因此多数民众赞成在我的个人脚本中:

#!/bin/sh
grep --color=always -r "$@" . | less -R

然后我将其复制为/usr/local/bin/g(是,我经常使用)


2
为什么不只将shell函数用于这种事情?g() { grep --color=always -r "$@" . | less -R }工作原理相同,可能会(在分钟内)提供更好的性能。
— 00dani

1
@ 00dani是的,这也是一个有效的替代方法,有时我会使用它。请注意,在这种情况下,大部分时间都花在IO上,因此无法显着提高性能:)另一个区别是,一旦进入PATH,该脚本也可以与其他Shell脚本和别名一起使用。该功能需要显式加载
— Iazel

1

不要使用别名“ grep”,最好使用别名“ less”,而shell从未使用过。在您.bashrc刚才输入的内容中: alias less="less -r"。


3
不太正确。一个需要使用两个 grep --color=always和less -R。请注意,grep仅知道它正在通过管道--color=auto传递到其他进程中,并且该选项仅使用此信息来确定是否输出颜色。
— brandizzi

3
请注意,该less选项-r不同于-R。可能-R更安全。
— Craig McQueen

1
那么,为什么要拒​​绝我的解决方案呢?OP特别要求less示例中已经使用`--color'选项。
— not2qubit 2014年

3
在此别名可能是不可取的。less支持$LESS环境变量。因此,最好不要使用别名export LESS='-R'。
— greyfade

0

我要跑步

grep --color=always -R "search string" * | less - r

在less后面加上-r标志,以使其运行。


怎么*办?从grep的手册页:*: The preceding item will be matched zero or more times.但是我还是不明白..!
— 莎燕
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.