关于高亮显示的问题

关于高亮显示的问题

复制内容到剪贴板
代码:
[No.254 22:57:05 ~ ]# cat dns  
DNS_REQ IN=eth0 OUT= MAC=00:0d:61:90:56:e8:00:e0:4d:20:a1:8d:08:00 SRC=10.3.51.43 DST=10.3.51.41 LEN=71 TOS=0x00 PREC=0x00 TTL=64 ID=17671 DF PROTO=UDP SPT=32815 DPT=53 LEN=51
DNS_REQ IN=eth0 OUT= MAC=00:0d:61:90:56:e8:00:e0:4d:20:a1:8d:08:00 SRC=10.3.51.43 DST=10.3.51.41 LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=17673 DF PROTO=UDP SPT=32816 DPT=53 LEN=42
DNS_REQ IN=eth0 OUT= MAC=00:0d:61:90:56:e8:00:e0:4d:20:a1:8d:08:00 SRC=10.3.51.43 DST=10.3.51.41 LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=24185 DF PROTO=UDP SPT=32817 DPT=53 LEN=42
DNS_REQ IN=eth0 OUT= MAC=00:0d:61:90:56:e8:00:e0:4d:20:a1:8d:08:00 SRC=10.3.51.43 DST=10.3.51.41 LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=24186 DF PROTO=UDP SPT=32818 DPT=53 LEN=42
DNS_REQ IN=eth0 OUT= MAC=00:0d:61:90:56:e8:00:e0:4d:20:a1:8d:08:00 SRC=10.3.51.43 DST=10.3.51.41 LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=24186 DF PROTO=UDP SPT=32819 DPT=53 LEN=42
DNS_REQ IN=eth0 OUT= MAC=00:0d:61:90:56:e8:00:e0:4d:20:a1:8d:08:00 SRC=10.3.51.43 DST=10.3.51.41 LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=24199 DF PROTO=UDP [B]SPT=32820[/B] DPT=53 LEN=42
请问如何用tput把SPT和后面的值高亮显示出来?      
不知道这个对你是否有帮助:grep --color      
闲来无事,用 perl 写个小东东:
复制内容到剪贴板
代码:
[color=blue]-(user@host:tty)-(tmp)-
[468 0] %[/color] cat ~/void/perl/re_colorize.pl
#!/usr/bin/perl -w
# vi:set ts=8 sw=4 sta et:
#
# Author: Wang Jian < dearvoid AT 263 DOT net >
#
# $Date: 2005-11-08 22:21:00 +0800 (Tue, 08 Nov 2005) $
# $HeadURL: svn://apple/mac/void/trunk/perl/re_colorize.pl $
# $Revision: 318 $
#
#--------------------------------------------------------------------#

use strict;

#--------------------------------------------------------------------#

main:
{
    my ($re, $fdFile);

    my $nArgs = scalar @ARGV;
    if ($nArgs == 1) {
        $re = $ARGV[0];
        $fdFile = *STDIN;
    } elsif ($nArgs == 2) {
        $re = $ARGV[0];
        my $filename = $ARGV[1];
        open $fdFile, $filename or die "Open file '$filename' error: $!";
    } else {
        print "Usage: $0 <RE> [file]\n";
        exit 1;
    }

    my $color_begin = "\033[1;35m";
    my $color_end = "\033[0m";

    my $line;
    while ($line = <$fdFile>) {
        chomp $line;
        if ($line =~ /$re/) {
            $line =~ s/($re)/$color_begin$1$color_end/g;
        }
        print $line, "\n";
    }

    exit 0;
}
[color=blue]-(user@host:tty)-(tmp)-
[468 0] %[/color] ls -l /usr/local/DarwinPorts-1.0/ | ~/void/perl/re_colorize.pl bin
total 8
drwxrwxr-x   17 clark  admin  578 Nov  1 22:19 [color=red]bin[/color]
drwxrwxr-x    4 clark  admin  136 Aug  1 22:13 etc
drwxrwxr-x    4 clark  admin  136 Oct  7 21:21 include
drwxrwxr-x    9 clark  admin  306 Oct  7 21:21 lib
drwxrwxr-x    2 clark  admin   68 Jul 16 16:16 libexec
lrwxr-xr-x    1 root   admin    9 Oct  7 21:11 man -> share/man
drwxrwxr-x    2 clark  admin   68 Jul 16 16:16 s[color=red]bin[/color]
drwxrwxr-x   10 clark  admin  340 Oct  7 21:21 share
drwxrwxr-x    3 clark  admin  102 Jul 16 16:16 var
[color=blue]-(user@host:tty)-(tmp)-
[468 0] %[/color]
      
PERL咱看不懂啊
grep --color 重定向到文本中高亮就不见啦
能不能换个shell 的?      
[QUOTE=li-jiahuan]grep --color 重定向到文本中高亮就不见啦[/QUOTE]想在文本文件里面高亮? 这个跟编辑器有关吧?      
复制内容到剪贴板
代码:
[No.581 12:07:52 ~ ]# echo "aa bb cc " | sed s/bb/$(tput smso)bb$(tput rmso)/
aa [B]bb[/B] cc
[No.582 12:08:11 ~ ]# echo "aa bb cc " | sed s/bb/$(tput smso)bb$(tput rmso)/ > kk
[No.583 12:08:28 ~ ]# cat kk
aa [B]bb[/B] cc
以上是手动加粗的
不过在终端下是有高亮效果的

bash没学好
没能实现想要的效果
不过是否能给dearvoid 一点启发?      
我那个 perl script 的执行结果重定向到文件中, 再 cat 的时候也有你那种效果

稍作修改就能改成 shell script