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

Jer*_*ell 271 grep colors less pipe

我经常使用 grep 的 --colour 选项,但我也经常使用较少。我怎样才能减少 grep 结果并仍然保留颜色。(或者这可能吗?)

grep "search-string" -R * --colour | less 
Run Code Online (Sandbox Code Playgroud)

编辑

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

drr*_*lvn 307

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

grep --color=always -R "search string" * | less
Run Code Online (Sandbox Code Playgroud)

将始终启用着色并覆盖自动检测,您将在less.

编辑:虽然使用只less对我有用,但旧版本可能需要-R标志来处理颜色,正如这里所建议的那样。

  • 您需要使用 `less -R` 来解释颜色编码不太正确 (162认同)
  • 我不敢相信他们只是在 `less` 中实现了颜色处理功能,因此错过了拥有特殊 `colorless` 工具的机会。光是名字就应该这样做!我应该编写一个补丁,当二进制文件作为 `colorless` 运行时自动调用 -R。 (8认同)
  • 一个(希望)有用的附录:我需要排除一些匹配但保持着色,所以我实际上最终得到了`grep 模式文件 | grep -v 错误模式 | grep --colour=always 模式 | less -R`,完美满足了我的需求。(再次感谢!) (2认同)
  • @OwenBlacker 这可能不是别名。你可能用 `-R` 设置了 `$LESS`。 (2认同)

Den*_*son 33

你可以把它放在你的.bashrc文件中:

export GREP_OPTIONS="--color=always"
Run Code Online (Sandbox Code Playgroud)

或创建这样的别名:

alias grepc="grep --color=always"
Run Code Online (Sandbox Code Playgroud)

并且您将需要使用-R选项 for less,正如这里所指出的

  • 警告!:GREP_OPTIONS="--color=always" 可能会破坏_许多_使用 grep(或 (e|f)grep)的脚本。 (34认同)
  • 是的,最好只是别名 grep。您始终可以使用`GREP` 获得纯`grep`,或者手动覆盖`--color` 选项。 (4认同)

Iaz*_*zel 12

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

#!/bin/sh
grep --color=always -r "$@" . | less -R
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么不直接在这种事情上使用 shell 函数呢?`g() { grep --color=always -r "$@" 。| less -R }` 的工作原理相同,可能会(每分钟)提供更好的性能。 (3认同)
  • @00dani 是的,这也是一个有效的替代方案,有时我会使用它。请注意,在这种情况下,大部分时间都花在 IO 上,因此没有明显的性能提升:) 另一个区别是,一旦进入您的 PATH,该脚本也可以与其他 shell 脚本和别名一起使用;该函数需要显式加载 (2认同)