使用从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加上别名。你总是可以得到纯净的grepGREP,或覆盖--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=alwaysless -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.