Changeset 2447


Ignore:
Timestamp:
10/27/20 08:49:06 (4 years ago)
Author:
nanardon
Message:

Add grep, rework sed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Cli/Object.pm

    r2446 r2447  
    380380        }, 
    381381    }); 
    382     $self->add_func('sed', { 
    383         help => 'Apply regular expression on curent attribute', 
    384         code => sub { 
    385             my ($env, $attr, $reg) = @_; 
     382 
     383=head3 show 
     384 
     385    grep ATTRIBUTE REGEXP 
     386     
     387Show value on specified attribute matching RE 
     388 
     389=cut 
     390 
     391    $self->add_func('grep', { 
     392        help => 'Find value matching regular expression on given attribute', 
     393        code => sub { 
     394            my ($env, @args) = @_; 
     395            my ( $attr, $reg )  = $self->getoption( 
     396                { 
     397                    'i'      => \my $icase, 
     398                }, @args 
     399            ); 
    386400            $reg or do { 
    387401                $self->print( "attribute and value must be specified\n" ); 
    388402                return; 
    389403            }; 
     404            my $reopt = ''; 
     405            $reopt .= 'i' if($icase); 
     406            my $re = eval"qr/$reg/$reopt"; 
     407            if ($@) { 
     408                $self->print($@); 
     409                return; 
     410            } 
     411            foreach (@{$env->{_objects}}) { 
     412                foreach my $val ($_->get_attributes($attr)) { 
     413                    if ($@) { 
     414                        $self->print("$@No change done\n"); 
     415                        $env->rollback; 
     416                        return; 
     417                    } 
     418                    if ($val =~ $re) { 
     419                        $self->printf("%s: %s\n", $_->id, $val); 
     420                    } 
     421                } 
     422            } 
     423        }, 
     424        completion => sub { 
     425            my ($env, $lastw, @args) = @_; 
     426            if (!$args[0]) { 
     427                return $env->base->list_canonical_fields($env->{_otype}, 'w') 
     428            } 
     429        }, 
     430    }); 
     431 
     432=head3 sed 
     433 
     434    sed ATTRIBUTE REGEXP VALUE 
     435 
     436Replace matching REGEXP by VALUE for specified ATTRIBUTE. 
     437If the resulting value is empty the value is deleted. 
     438 
     439=cut 
     440 
     441    $self->add_func('sed', { 
     442        help => 'Apply regular expression on given attribute to modify it', 
     443        code => sub { 
     444            my ($env, @args) = @_; 
     445            my ( $attr, $reg, $subst )  = $self->getoption( 
     446                { 
     447                    'i'      => \my $icase, 
     448                }, @args 
     449            ); 
     450            $subst or do { 
     451                $self->print( "attribute and value must be specified\n" ); 
     452                return; 
     453            }; 
     454            my $reopt = ''; 
     455            $reopt .= 'i' if($icase); 
     456            my $re = eval"qr/$reg/$reopt"; 
     457            if ($@) { 
     458                $self->print($@); 
     459                return; 
     460            } 
    390461            foreach (@{$env->{_objects}}) { 
    391462                my @newvalues; 
     
    393464                foreach my $val ($_->get_attributes($attr)) { 
    394465                    my $nval = $val; 
    395                     eval "\$nval =~ $reg;"; 
    396                     if ($@) { 
    397                         $self->print("$@No change done\n"); 
    398                         $env->rollback; 
    399                         return; 
    400                     } 
     466                    $nval =~ s/$re/$subst/; 
    401467                    if ($val ne $nval) { 
    402468                        $self->printf("%s: %s => %s\n", $_->id, $val, $nval); 
Note: See TracChangeset for help on using the changeset viewer.