$ cat passwd root:x:0:0:ifeuu1 root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin noncom:x:0:0:cause RegEx Fail:/noncom:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown #### #!/usr/bin/perl # perl-grep4.pl my $pattern = shift @ARGV; my $regex = eval { qr/$pattern/ }; die "Check your pattern! $@" if $@; while( <> ) { if( m/$regex/ ) { print "$_"; print "\t\t\$&: ", substr( $_, $-[0], $+[0] - $-[0] ), "\n"; foreach my $i ( 1 .. $#- ) { print "\t\t\$$i: ", substr( $_, $-[$i], $+[$i] - $-[$i] ), "\n"; } } } #### $ Test5.pl '(?## PW:root:passwd:(?## #!/usr/bin/perl #use strict; #use warnings; use Text::ParseWords; my ($RECORD, @FIELDS, $RE); my $DFile="/home/infosec/data/RegEx"; open (DATA, "<$DFile") || die ("Cannot open DATA file \n"); my @LINES=; my $tLINES=@LINES; foreach $RECORD (@LINES[0..$tLINES-1]) { @FIELDS=split(/:/, "$RECORD"); my $TNAME=$FIELDS[0]; my $TVALU=$FIELDS[1]; my $TFILE=$FIELDS[2]; my $REGEX=$FIELDS[3]; chomp($REGEX); my $regex = eval { qr/$REGEX/ }; print "$regex \n"; open (TFILE, "<$TFILE") || die ("Cannot open Test file \n"); while () { if( m/$regex/ ) { print "$_"; print "\t\t\$&: ", substr( $_, $-[0], $+[0] - $-[0] ), "\n"; foreach my $i ( 1 .. $#- ) { print "\t\t\$$i: ", substr( $_, $-[$i], $+[$i] - $-[$i] ), "\n"; } } } print "\n"; } print "\n"; #### $ Test6.pl root:x:0:0:ifeuu1 root:/root:/bin/bash $&: bin:x:1:1:bin:/bin:/sbin/nologin $&: noncom:x:0:0:cause RegEx Fail:/noncom:/bin/bash $&: daemon:x:2:2:daemon:/sbin:/sbin/nologin $&: adm:x:3:4:adm:/var/adm:/sbin/nologin $&: lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin $&: sync:x:5:0:sync:/sbin:/bin/sync $&: shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown $&: