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

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


编辑:

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

评论

在“较少”命令中获取颜色的可能重复项

*是做什么的?在grep的手册页中:*:前一项将被匹配零次或多次。但是我还是不明白..! @JeremyPowell

@Shayan,在这种情况下,“ *”用于文件参数。它由外壳程序处理,然后将其扩展到目录中的所有文件。在示例中,搜索字符串用双引号引起来。

#1 楼

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

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


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

EDIT :尽管仅使用less对我有用,但也许较旧的版本需要-R标志来处理颜色,如此处所建议。

评论


您需要使用更少的-R来减少颜色编码的正确性

–从这里
09-09-4 23:24

它为我工作的时间更少,可能取决于版本。

– drrlvn
09年9月5日在12:14

(希望)有用的附录:我需要排除一些匹配项,但要保持颜色不变,所以实际上我最终得到了grep模式文件| grep -v badpattern | grep --colour =总是模式| -R较少,完全满足了我的需求。 (再次感谢!)

–欧文·布莱克(Owen Blacker)
2012年6月6日15:35

我不敢相信他们只是花更少的钱就实现了色彩处理功能,因此错过了使用特殊的无色工具的机会。仅就名称而言,它应该已经完成​​!我可能应该编写一个补丁,当二进制文件以无色方式运行时,该补丁会自动调用-R。

–基督徒
13年7月10日在0:42

@OwenBlacker可能不是别名。您可能使用-R设置了$ LESS。

– Greyfade
16年8月30日在21:01

#2 楼

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

export GREP_OPTIONS="--color=always"


,或创建这样的别名:

alias grepc="grep --color=always"


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

评论


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

–mctylr
2010年3月12日19:25



是的,最好只是给grep加上别名。您始终可以使用GREP获得纯grep,或手动覆盖--color选项。

– asmeurer
2011年7月18日在22:51

这对我不起作用,不过别名确实起作用。

– saeedgnu
2014年2月28日在3:30



#3 楼

在这种情况下,我更喜欢实际创建小的sh文件并将它们放在/usr/local/bin上。
我通常在grep上以递归方式使用pwd,所以这就是我的个人脚本:

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


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

评论


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

–00dani
17年1月11日下午2:00

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

–艾泽尔
19年1月27日,12:15



#4 楼

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

评论


不太正确。一个需要同时使用grep --color = always和更少的-R。请注意,grep仅知道它正在通过管道传递到其他进程中,-color = auto选项仅使用此信息来决定是否输出颜色。

– brandizzi
13年4月17日在18:35

请注意,较少的选项-r与-R不同。 -R可能更安全。

–克雷格·麦昆(Craig McQueen)
2014年1月9日,0:26

那么,为什么要拒​​绝我的解决方案呢? OP已经使用`--color'选项的例子专门要求更少。

–not2qubit
2014年1月9日15:58

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

– Greyfade
16年8月30日在20:59

#5 楼

我需要在-r标志之后再运行

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


,然后才能运行。

评论


*是做什么的?在grep的手册页中:*:前一项将被匹配零次或多次。但是我还是不明白..!

–沙燕
19-09-1在17:36



@Shayan它将在所有文件中搜索文本“搜索字符串”。

– Pepedou
20年6月1日在19:41