logo
Author: n4n
Description: Find string or word in the text file(s)
Language: 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);
}

Recent pastes:
blessmaster (PHP)
antonivanov (SQL)
antonivanov (PHP)
brinza (PHP)
ilyhamas (Delphi)
Riateche (PHP)
otherlight (Java)
otherlight (JavaScript)
otherlight (CSS)
otherlight (CSS)
biophreak (JavaScript)
n4n (Perl)
prostoHz (Java)
ndubinkin (XML)
Riateche (Plain Text)
Slapotam (Perl)
ksurent (Perl)
John_Wein (Java)
John_Wein (HTML)
Riateche (HTML)
netsago.paste.β © 2009 Neunica