[20150428]grep加颜色小问题.txt
--我以前写的:
grep的问题 => http://blog.itpub.net/267265/viewspace-82985/
grep显示加颜色 => http://blog.itpub.net/267265/viewspace-663079/
--以前一直不理解color=always表示什么,做一个例子.
$ echo $GREP_COLOR
01;32
--表示显示是高亮绿色.
--我的演示版本是redhat 4.3,有点低,但是还是能说明问题的.
$ ls -l
total 588
drwxr-xr-x 2 oracle11g oinstall 4096 2015-01-13 16:18:07 bbed
drwxr-xr-x 2 oracle11g oinstall 4096 2015-04-27 08:43:05 bin
drwxr-xr-x 2 oracle11g oinstall 4096 2011-11-22 09:45:43 Desktop
$ export GREP_OPTIONS='--color=always'
$ ls -l | grep bbed | cut -c64-
bbed
--注:存在彩色的输出.
$ ls -l | grep bbed | cut -c65-
[01;32mbbed
--我少取一个字符,这样颜色显示部分破坏.导致取出一些控制字符.实际上上面也取出,只不过作为显示部分.
$ export GREP_OPTIONS='--color=auto'
$ ls -l | grep bbed | cut -c64-
bbed
$ ls -l | grep bbed | cut -c65-
bed
--没有颜色输出.
--always和auto的区别就是,always会在任何情况下都给匹配字段加上颜色标记,当通过管道或重定向时就会多出一些控制字符.
--理解这点很重要,一些安装软件如果通过管道比如例子使用cut,或者过滤的情况,会导致安装存在问题,这点在工作中要注意.
--做一个假设,假设shell脚本如下:
$ cat a.sh
#! /bin/bash
ls -l | grep bbed | cut -c65-
$ chmod 755 a.sh
$ export GREP_OPTIONS='--color=always'
$ ./a.sh
bbed
$ . ./a.sh
[01;32mbbed
$ source ./a.sh
[01;32mbbed
--可以发现第1种执行方式的显示与第2,3种不一样.再来看看--color=auto情况:
$ export GREP_OPTIONS='--color=auto'
$ ./a.sh
$ . ./a.sh
bed
$ source ./a.sh
bed
--哦! 第1种执行方式竟然没有输出.奇怪吧!当然你估计演示不出来:
$ /bin/ls -l | /bin/grep bbed
drwxr-xr-x 2 oracle11g oinstall 4096 Jan 13 16:18 bbed
$ ls -l | /bin/grep bbed
drwxr-xr-x 2 oracle11g oinstall 4096 2015-01-13 16:18:07 bbed
--因为我定义的别名跟别人的不一样
$ alias ls
alias ls='ls --color=tty --time-style=+"%Y-%m-%d %H:%M:%S"'
--总之在安装软件时特别执行一些shell脚本时注意别名以及一些其它情况!