logo
Автор: n4n
Описание: Find string or word in the text file(s)
Язык: Perl
#!/usr/bin/perl

#
# plUnixBox::sFind.pl - Find string or word in the text file(s)
# Version: 0.1
# (c)ode by Grishkovtsov GE. aka n4n0bit
# http://grishkovtsov.blogspot.com/
#

use strict;
use warnings;
use Getopt::Std;

our $VERSION = 0.1;

main:
{
    my $lc = 0; # Line Counter
    my (%rslt, %opt);

    getopts("p:s:e:vV", \%opt);

    usage() unless @opt{'p','s'};

    foreach my $fn ( `find $opt{'p'} -type f` )
    {
        chomp $fn;
        next unless -f $fn;

        open FH, $fn or die "Can't open $fn: $!";
        while(my $str = <FH>)
        {
            $lc++;
            chomp $str;

            if($str =~ /$opt{'s'}/)
            {
                $str =~ s/^\s+//;
                $rslt{$lc}{'f'} = $fn;
                $rslt{$lc}{'s'} = $str;
                syswrite STDOUT, "[$lc] $fn:\n$str\n\n" if $opt{'v'};
            }
        }
        close FH;
        $lc = 0;
    }

    if(keys %rslt > 0)
    {
        system("clear") unless $opt{'v'};
        print "/*\n";
        print " * plUnixBox::sFind.pl - Result:\n";
        print " */\n";

        my(%tmp, $c);
        foreach my $l ( keys %rslt)
        {
            $c++;
            print "[$c] $rslt{$l}{'f'}: $l\n";
            print "  $rslt{$l}{'s'}\n" if $opt{'V'};
            $tmp{$c} = "$opt{e} +$l $rslt{$l}{'f'}" if $opt{'e'};
        }

        if($opt{'e'})
        {
            print "* What opened?: ";
            while(my $in = <STDIN>)
            {
                chomp $in;
                if($tmp{$in}) { system($tmp{$in}); }
                else { print "* Error: $in not found number, please reinput document number: "; }
            }
        }
    }
    else
    {
        system("clear");
        print "/*";
        print " * plUnixBox::sFind.pl - result in 0";
        print " */";
    }
}

sub usage
{
    print "/* \n";
    print " * Usage: $0 [OPTION]\n *\n";
    print " * Options:\n";
    print " *       -p  Find path\n";
    print " *       -s  What you find. You can use a word or PERL regular expression\n";
    print " *       -e  Open file editor and goto the find string. Support programm: vi, nano, mcedit\n";
    print " *       -v  Show find string in real-time\n";
    print " *       -V  Show find string after find\n";
    print " * eXamples:\n";
    print " *       $0 -p /foo/bar -s system\n";
    print " *       $0 -p /foo/bar -s '/passwd/i' -v\n";
    print " *       $0 -p /foo/bar -s '/passwd/i' -e nano\n";
    print " *       $0 -p /foo/bar -s '/passwd/i' -e mcedit -V\n";
    print " */\n";
    exit(1);
}

Последние размещения:
biophreak (Plain Text)
Raik (PHP)
MUSbKA (Plain Text)
MUSbKA (Plain Text)
nekitozzz (C++)
nekitozzz (Plain Text)
nekitozzz (C++)
ksurent (Perl)
MUSbKA (C++)
stalin_alex (C++)
dzantiev (Plain Text)
unreal (C++)
eug2b (Plain Text)
netsago.paste.β © 2009 Neunica