小智 52
您可以通过指定--color = always并使用正则表达式'foo | $'传递所有行来使用不同颜色级联grep.
例如:
tail -f myfwlog | GREP_COLOR='01;36' egrep --color=always 'ssh|$' | GREP_COLOR='01;31' egrep -i --color=always 'drop|deny|$'
Run Code Online (Sandbox Code Playgroud)
如果您希望突出显示整行,请相应地更新正则表达式:
.... GREP_COLOR='01;31' egrep -i --color=always '^.*drop.*$|^.*deny.*$|$'
Run Code Online (Sandbox Code Playgroud)
che*_*ner 29
grep是一个正则表达式匹配器,而不是语法高亮显示器:).您将不得不使用多个调用grep,GREP_COLOR每个调用使用不同的值.
GREP_COLOR="1;32" grep foo file.txt | GREP_COLOR="1;36" grep bar
Run Code Online (Sandbox Code Playgroud)
这将突出显示"foo"和"bar"在不同颜色的行中匹配两者.我不认为有一种(简单)方法来处理任何模式的所有出现,而不是合并两个独立调用的输出流:
{ GREP_COLOR="1;32" grep foo file.txt
GREP_COLOR="1;36" grep bar file.txt
} | ...
Run Code Online (Sandbox Code Playgroud)
这显然与有一种方法为每个正则表达式分配单独的颜色有所不同.
您可以使用awk包装在正确控制代码中的每个匹配来替换它们.
echo "foo bar" | awk '{ gsub("bar", "\033[1;33m&\033[0m");
gsub("foo", "\033[1;36m&\033[0m"); print }'
Run Code Online (Sandbox Code Playgroud)
在每一行中,您将全局替换与给定正则表达式匹配的任何内容,并将自身(&)包含在ANSI转义序列中以获得所需的颜色(grep --color适合您).处理完所有可能的匹配后,您需要明确打印该行.
小智 8
我需要在文本文件中突出显示字符串,并且没有找到适合我需要的方法,因此我编写了一个简单的C程序来着色匹配正则表达式的字符串.
您可以从GitHub下载源代码:
git clone http://github.com/mbornet-hl/hl
Run Code Online (Sandbox Code Playgroud)
然后 :
cd hl/cr; make
Run Code Online (Sandbox Code Playgroud)
这是用法:
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
Run Code Online (Sandbox Code Playgroud)
要将红色的单词"red"和蓝色的单词"blue"着色,您只需输入以下命令:
echo "red blue red blue" | hl -r red -b blue
Run Code Online (Sandbox Code Playgroud)
这是一个突出显示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}\>' \
-y '^(eth|(vir)?br|vnet)[0-9.:]*\>' \
-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]*'
Run Code Online (Sandbox Code Playgroud)
指定颜色的顺序很重要:如果字符串匹配多个正则表达式,则第一个作为优先级高于第二个正则表达式,第二个作为优先级高于第三个,依此类推......
希望这可以帮助.
小智 5
尝试精彩的 rpen http://github.com/rtulke/rpen
require egrep or grep
Run Code Online (Sandbox Code Playgroud)
现在您需要将rpen.py文件复制到正确的文件夹中并赋予其适当的权限
cp rpen.py /usr/local/bin/rpen
chmod a+rx /usr/local/bin/rpen
Run Code Online (Sandbox Code Playgroud)
然后尝试
ps xau |rpen Ss "S\+" "\?\?"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39861 次 |
| 最近记录: |