Zit*_*rax 133 linux bash grep pipe colors
在grep'ing之后Preserve ls着色中有一个类似的问题,但是如果你把彩色的grep输出管道输入另一个grep,颜色不会被保留,那就很烦人了.
例如grep --color WORD * | grep -v AVOID,不保留第一个输出的颜色.但对我来说ls | grep FILE,保持颜色,为什么差异?
Ott*_*ger 154
grep有时会禁用颜色输出,例如在写入管道时.您可以使用覆盖此行为grep --color=always
正确的命令行将是
grep --color=always WORD * | grep -v AVOID
Run Code Online (Sandbox Code Playgroud)
这非常冗长,或者您可以添加该行
alias cgrep="grep --color=always"
Run Code Online (Sandbox Code Playgroud)
以您.bashrc为例,并cgrep用作彩色grep.重新定义时,grep您可能会遇到依赖于特定输出grep且不喜欢ascii转义码的脚本的问题.
and*_*vom 73
一句忠告:
使用时grep --color=always,将传递传递给下一个管道的实际字符串.这可能导致以下情况:
$ grep --color=always -e '1' * | grep -ve '12'
11
12
13
Run Code Online (Sandbox Code Playgroud)
即使该选项-ve '12'应该排除中间行,也不会因为1和之间有颜色字符2.
Sri*_*bat 12
现有的答案仅针对 FIRST 命令的情况grep(如 OP 所问,但在其他情况下也会出现此问题)。
基本问题是命令 BEFORE| grep试图通过在意识到输出进入管道时禁用颜色来“智能”。这通常是您想要的,以便 ANSI 转义码不会干扰您的下游程序。
但是,如果您想要从早期命令发出的彩色输出,则需要强制生成颜色代码,而不管输出接收器如何。强制机制是特定于程序的。
git -c color.status=always status | grep -v .DS_Store
Run Code Online (Sandbox Code Playgroud)
注意:-c选项必须在子命令之前出现status。
(这是一个社区维基帖子,所以请随意添加您的)
虽然有点'hack-ish',但它也可以简单地重复管道末端的grep命令.
grep WORD * | grep -v AVOID | grep -v AVOID2 | grep WORD
| 归档时间: |
|
| 查看次数: |
28677 次 |
| 最近记录: |