Grep 退出多种颜色?

是否有优雅的方法 bash 开始
grep

针对具有两个或多个模板的文本文件,以及匹配的每个模板,以另一种颜色输出?

因此,串一致
MALE


AUGUST

, 将输出
MALE

蓝色I.
AUGUST

橘子?
我很开心
sed

,
awk

,
grep

和彩色铅笔或其他人。
已邀请:

冰洋

赞同来自:

你可以级联 greps 用不同的颜色表明 --color=always 并使用正则表达式 'foo|$' 转移所有线路。

例如:


tail -f myfwlog | GREP_COLOR='01;36' egrep --color=always 'ssh|$' | GREP_COLOR='01;31' egrep -i --color=always 'drop|deny|$'


如果要突出显示整个字符串,请相应更新正则表达式:


.... GREP_COLOR='01;31' egrep -i --color=always '^.*drop.*$|^.*deny.*$|$'

君笑尘

赞同来自:

grep

- 这是相当的正则表达式,而不是语法标记 :/. 您必须使用多个电话。
grep

, 对它们中的每一个使用不同的值。
GREP_COLOR

.


GREP_COLOR="1;32" grep foo file.txt | GREP_COLOR="1;36" grep bar


这将分配 "foo" 和 "bar" 匹配两条线的不同颜色。 我不认为存在 /清楚的/ 处理方法

全部

除了两个独立呼叫的输出流的合并之外,任何模板的出现:


{ GREP_COLOR="1;32" grep foo file.txt
GREP_COLOR="1;36" grep bar file.txt
} | ...


显然,如果有一种方法可以为每个正则表达式分配单独的颜色,它看起来不同。

您可以使用
awk

, 要替换每种匹配项,请以正确的管理代码包裹。


echo "foo bar" | awk '{ gsub/"bar", "\033[1;33m&\033[0m"/;
gsub/"foo", "\033[1;36m&\033[0m"/; print }'


在每一行中,您全局替换符合此正则表达式的所有内容 /
&

/, 用逃生序列包裹 ANSI 对于所需的颜色 /是什么让你
grep --color

/. 处理所有可能的巧合后,您需要明确打印字符串。

郭文康

赞同来自:

如果您需要开箱即用的东西,您可能正在寻找
https://github.com/paoloantino ... shots
.

这是一个例子:

看。 这对不同颜色的自动着色单词非常有用。 这是一个内置于顶部的令人印象深刻的项目。
http://beyondgrep.com/
.

小明明

赞同来自:

我需要突出显示文本文件中的行,我没有找到与我的需求相对应的方式,所以我写了一个简单的程序 C 用于对应于正则表达式对应的着色行。

您可以从网站下载源代码。 GitHub :


git clone [url=http://github.com/mbornet-hl/hl]http://github.com/mbornet-hl/hl[/url]


然后 :


cd hl/cr; make


这就是它的用途 :


hl: version 1.21
Usage: hl [-h|-eidD][-E][-rgybmcwRGYBMCW] regexp ...
-h : help
-v : version
-u : do not bufferize output on stdout
-e : extended regular expressions
-i : ignore case
-E : print on stderr
-r : red
-g : green
-y : yellow
-b : blue
-m : magenta
-c : cyan
-w : white
-R : red /reverse video/
-G : green /reverse video/
-Y : yellow /reverse video/
-B : blue /reverse video/
-M : magenta /reverse video/
-C : cyan /reverse video/
-W : white /reverse video/
-d : debug
-D : display regular expressions


彩色这个词 "red" 在红色,和这个词 "blue" 以蓝色为蓝色,您只需输入以下命令 :


echo "red blue red blue" | hl -r red -b blue


但突出显示命令输出的示例 ifconfig :


hl -ei -m '^/eth|/vir/?br|vnet/[0-9.]*:[0-9]+\>' \
-b '^/eth|/vir/?br|vnet/[0-9.]*\.[0-9]+\>' \
-c '/[0-9a-f]{2}:/{5}[0-9a-f]{2}' \
-g '\<up\>|\<running\>|/[0-9]{1,3}\./{3}[0-9]{1,3}\&gt;' \
-y '^/eth|/vir/?br|vnet/[0-9.:]*\&gt;' \
-W '[0-9a-f]{4}::[0-9a-f]{4}\:[0-9a-f]{4}:[0-9a-f]{4}:[0-9a-f]{4}' \
-r ' /errors|dropped|overruns/:[^0][0-9]*'


您指定颜色的顺序很重要 : 如果字符串对应于多个正则表达式,则第1个具有比第2个,2-E高的优先级更高,优先级高于第3个等等。 ...

我希望它会有所帮助。
</running\></up\>

莫问

赞同来自:

尝试精彩 rpen
http://github.com/rtulke/rpen

require egrep or grep


现在您需要复制文件

rpen.py

在所需的文件夹中并提供相关权限


cp rpen.py /usr/local/bin/rpen
chmod a+rx /usr/local/bin/rpen


然后尝试


ps xau |rpen Ss "S\+" "\?\?"

风见雨下

赞同来自:

所以,这是版本/S./ , 使用 sed. 假设你想要这个词 "FAILED" 它被涂在红色,它将是:


sed 's/\/ERROR\//\o033[31m\1\o033[39m/'


到包含单词的整个字符串 "FAILED", 它标有红色:


sed 's/\/.*ERROR.*\//\o033[31m\1\o033[39m/'


因此,几个单词被标记为红色:


sed 's/\/ERROR\|FAILED\//\o033[31m\1\o033[39m/'


有几个字及其线条 wohle, 红色标记:


sed 's/\/.*FAILED.*\|.*ERROR.*\//\o033[31m\1\o033[39m/'


有几种颜色 /ERROR=red/FAILED=blue/


sed -e 's/\/ERROR\//\o033[31m\1\o033[39m/' -e 's/\/FAILED\//\o033[34m\1\o033[39m/'


用这一切 ssh:


ssh user@host -t "tail -n 1024 -f /some/log/file | sed --unbuffered -e 's/\/.*ERROR.*\|.*FAILED.*\//\o033[31m\1\o033[39m/' -e 's/\/.*postfix.*\|.*dhcpd.*\//\o033[32m\1\o033[39m/'"


并且为了每次都没有进入它,只是将其声明为您的函数 bashrc.

对于其他颜色,寻找代码 ANSI.

冰洋

赞同来自:

这个怎么样? 你可以用它 grep ONLY! 这里的技巧如下: /1/ 你在拍摄 /OR/ 正在寻找的单词; /2/ 您使用的选项-a和b具有足够大的数字 /超过您文件的行数/.


echo "you make it" > tmp
echo "you take it" >> tmp
echo "you cake it" >> tmp
echo "you bake it" >> tmp
echo "you wake it" >> tmp

GREP_COLOR='1;32' grep -P "/take|cake|bake/" --color=always tmp | GREP_COLOR='1;33' grep -P "/cake|bake/" --color=always -A10000 -B10000 | GREP_COLOR='1;34' grep -P "/bake/" --color=always -A10000 -B10000

莫问

赞同来自:

https://github.com/dczhu/cxpgrep
适合这个目的 - 它突出了不同颜色的模式。


cxpgrep 'PAT1|PAT2|...' FILE_OR_DIRECTORY

郭文康

赞同来自:

我的答案如下:


tailf logfile awk '/MALE/' {print "\033[34m" $0 "\033[39m"} '/MALE/' {print "\033[33m" $0 "\033[39m"}

要回复问题请先登录注册