天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧系统 >> 正文

如何成为一个UNIX系统的“好色”之徒

2008-4-8赛迪网佚名

  首先熟悉颜色代码的“通用”表示:

  

  对于两位的数字:

  

  第一位数字为3表示定义的是前景色, 为4表示背景色。

  第二位数字定义具体的颜色. 1 为Red, 2为Green, 3为Blue, 0表示黑色。

  

  举例: 31;40m 表示前景为红色, 背景色为黑色。

  

  前景背景色之间用;来分隔. 以字符m表示定义的结束, 如果没有前景或背景的定义则沿用当前的设置。单个的数字0表示是较暗的颜色, 为1表示是较亮的颜色, 这个较亮较暗都是指前景色而言。

  

  以上所说的"通用"是一般的字符终端的驱动所理解的颜色代码的表示法, 当然, 颜色表示必需是一个比较少会出现的特殊字符序列开始的. 这个序列是:

  [[ 其中^[的ASCII的27, 也就是通过由Escape输入的值, 在终端命令行上, 需要用〈C-V〉ESC 来输入它。

  

  下面是我们可以在哪些方面变得好色:

  

  1. 命令行的提示字符串

  在这里定义颜色千万要注意用 \[表示特殊序列的开始, 用\]表示特殊序列的结束, 否则终端驱动会错误地计算提示字符串应该占用多少个字符的空间, 因为象 ^[[31;40m 这么多字符其实并不占用屏幕上的输出空间, 其目的只是改变颜色而已。

  

  2. ls --color

  初步好色的人才会老老实实地输入长长的 --color, 老色鬼早就用alias把自己隐藏起来了。

  具体什么文件用什么颜色显示要看 LS_COLORS环境变量的内容了, 这个环境变量内容实在是长, 不过定义它不必一个一个敲进去, dircolors 命令可以从 /etc/DIR_COLORS 中读取一个可读形式的颜色定制方案, 然后转换成一个压缩版的环境变量, 注意dircolors的输出是一个命令, 这个命令本身需要你的当前shell去执行才会生效。

  需要 eval "$(dircolors /etc/DIR_COLORS)" 才会在你的当前环境中加入LS_COLORS变量. 在子SHELL中执行它将不会惠及父进程。

  

  3. grep --color

  我曾经设想过为黑白时代的grep加入高亮其颜色支持的功能, 不想已经先于我被实现出来了. 这可能不是POSIX对grep规范的一部分, 但实在是好处多多, 尤其对于初涉正则表达式的人来说, 它不但让你得到匹配的行, 还以醒目的方式告诉你这一行的哪个部分匹配到了你的正则表达式, 因而会被匹配到grep -P 'ab+' <<

  输出的是abbbbbbbbbbbbb

  从头到尾都是红的

  输出的也是

  abbbbbbbbbbbbb

  只有开头的ab两个字符才是红色的。

  

  4. 为任意的输出着色

  grep只会显示那些匹配的行, 或不匹配的行, 所以它无法同时显示那些不匹配的行, 比如, 下面是cvs的输出:

  revision 1.1.1.1.2.3

  date: 2005/09/08 08:19:52; author: Admin; state: Exp; lines: +16 -0; kopt: kv; co

  mmitid: 16c4431ff4271016; filename: abc;

  no message

  ----------------------------

  revision 1.1.1.1.2.2

  date: 2005/08/22 08:48:48; author: Admin; state: Exp; lines: +1 -1; kopt: kv; com

  mitid: 13ec4309916b75eb; filename: abc;

  no message

  ----------------------------

  revision 1.1.1.1.2.1

  date: 2005/08/19 01:03:50; author: Admin; state: Exp; lines: +18 -18; kopt: kv; c

  ommitid: 5b8443052ff527b3; filename: abc;

  no message

  ----------------------------

  revision 1.2.4.1

  date: 2006/08/23 08:40:12; author: Admin; state: Exp; lines: +147 -32; kopt: kv; comm

  itid: 45444ec145d23e2; filename: abc;

  no message

  

  这些信息太过杂乱, 我想突出显示的是日期和作者, grep 不能轻松地让你得到. 这就需要对匹配的部分强行加入颜色编码, 然后再送给终端驱动来突出显示。

  

  sed

  ===

  cvs log -N abc | sed 's#date: \(.*author: [^;]*\)#date: \x1b[1;31m\1\x1b[1;37m#'

  

  注意不要尝试用\033 的八进制表示法来代替输入\x1b, 因为sed用\0表示整个匹配的字符串, 结果一定不是你想要的。

  

  通过grep 的上下文显示功能, 还是可以近似地得到预期:

  cvs log -N abc | grep --color -C100 -P '(?<=date:) .*author: [^;]*'

  -C100 使得grep能输出足够多的上下文以供查看, 当然grep要足够聪明不重复显示这些上下文。

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛https://bbs.txwb.com

关注天下网吧微信,了解网吧网咖经营管理,安装维护:


本文来源:赛迪网 作者:佚名

声明
本文来源地址:0
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系Email:support@txwb.com.,本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行