unixでファイル内検索を使い易くする

terminalでファイル内検索をする時,普段は,

ls *\.txt|xargs grep XXX

もしくは,

find . -name '*\.txt'|xargs grep XXX

とかやってたけど,見難くてしょうがない.

だから,bashで色付けしようと思って,スクリプト書いた.

#!/usr/bin/perl
my $color1 = q{Red};
my $color2 = q{Yellow};

#=================================================
my $font_color = {
    Black       => '0;30', DarkGray     => '1;30',
    Blue        => '0;34', LightBlue    => '1;34',
    Green       => '0;32', LightGreen   => '1;32',
    Cyan        => '0;36', LightCyan    => '1;36',
    Red         => '0;31', LightRed     => '1;31',
    Purple      => '0;35', LightPurple  => '1;35',
    Brown       => '0;33', Yellow        => '1;33',
    LightGray  => '0;37', White         => '1;37',
};

my @files = @ARGV[0..(@ARGV-2)];
my $fcolor1 = $font_color->{$color1};
my $fcolor2 = $font_color->{$color2};
die q{font_color_error} unless($fcolor1 && $fcolor2);
die q{param error} if( @ARGV < 2 );

my $grep = $grep1 = $ARGV[-1];

$grep1 = '\\'.$grep if( $grep =~ m!^\-! );
my $result = `grep '${grep1}' @files`;

$result =~ s!${grep}!\033[${fcolor2}m${grep}\033[0m!gs;
$result =~ s!\n!\n\n\n!gs;
$result =~ s!(^|\n)(.+?:)!\033[${fcolor1}m${2}\033[0m\n!gs;
print $result;

もっとスマートに書けるようになりたい.