Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

How to findout a sub string from the string

by gjoshi (Sexton)
on Feb 13, 2016 at 17:48 UTC ( [id://1155162]=perlquestion: print w/replies, xml ) Need Help??

gjoshi has asked for the wisdom of the Perl Monks concerning the following question:

Hi all I have string like
$tmp = "1: 2\n2: /my/tmp/20160213T161519/outgoing\n3: DL\n4: 0\nTempSo +urce: , Ue: 2, TaskName=, TempDest: \nTaskName \n/data/busybox/ps |gr +ep mgen5| grep -v grep\nDL txt is running PID: 3848\nRunning:Mgen:384 +8";
I would like to just get string "Running:Mgen:3848" and store it in a variable so that I can do come post processing. thanks --girija

Replies are listed 'Best First'.
Re: How to findout a sub string from the string
by davido (Cardinal) on Feb 13, 2016 at 19:38 UTC

    For your simple specification you really only need to find the final newline and capture through the end of the string. A regular expression isn't needed for that:

    my $found = substr $tmp, rindex($tmp, "\n")+1; print "$found\n";

    This solution would translate with minor changes to almost any language.

    A regular expression would let you get more fancy in what you gather without the code becoming unmanagable.

    my $tmp = "1: 2\n2: /my/tmp/20160213T161519/outgoing\n3: DL\n4: 0\nTem +pSource: , Ue: 2, TaskName=, TempDest: \nTaskName \n/data/busybox/ps +|grep mgen5| grep -v grep\nDL txt is running PID: 3848\nRunning:Mgen: +3848"; my @fields = qw(All Value Name Process_ID); my %substr; @substr{@fields} = $tmp =~ m/\n(Running:(([^:]+):(\d+)))(?:\D|$)/; printf "%-12s[%s]\n", $_, $substr{$_} for @fields;

    This produces...

    All [Running:Mgen:3848] Value [Mgen:3848] Name [Mgen] Process_ID [3848]

    Dave

      wow and ++davido; the regexed monk offered a pre regex (clean and neet) solution using rindex ;=)

      shame on me 'cause i never seen rindex before

      L*

      There are no rules, there are no thumbs..
      Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.

        :) Well to be fair I first toyed with using reverse and index, before thinking to myself... "hmmm... I seem to remember rindex being a thing."

        I wasn't immediately certain that my recollection of rindex came from Perl or another language. Most common languages probably provide something similar.


        Dave

Re: How to findout a sub string from the string
by Laurent_R (Canon) on Feb 13, 2016 at 18:27 UTC
    You need to say more on how to determine what you want to extract.

    Assuming you want to extract the last line of the string (i.e. everything after the last \n), you could use split and retrieve the last field:

    my $substring = (split /\n/, $tmp)[-1];
    Or use a regular expression:
    my ($substring) = $tmp =~ /\n(.*)$/;
Re: How to findout a sub string from the string
by Discipulus (Canon) on Feb 13, 2016 at 17:54 UTC
    welcome gjoshi

    peraphs you want to use a regex (regular expression) to to this kind of job.

    perlrequick gives you the basic, while perlretut is a longer introduction to the matter.

    Pay attention with \n newlines in your data: normally the . dot does not match them.

    If you capture with (your pattern) parens then you'll have results stored into $1 ( $2 .. etc) see perlvar

    In my homenode you can find some tool to play with regexes online or offline.

    L*

    There are no rules, there are no thumbs..
    Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.

      Don't forget the Holy Book itself: perlre.


      Give a man a fish:  <%-{-{-{-<

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://1155162]
Approved by Discipulus
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (4)
As of 2024-03-29 12:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found