Oddly i cannot find a simple answer to this rather important question anywhere on the web.

I am trying to extract ip address and port from multiple occurrences in a file.

if ($_ =~ /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{1,5}:/ +) {print MYFILE2 "$_ \n";}

Will find it and print it if the line contains it.

BUT.. How do i match it and assign the IP address to a variable even if the string contains multiple addresses?

I had though i could split the file into words and then for each word compare but there has to be a better way.

Thanks in advance

monkomatic

Thank you for your quick reply MORITZ but what am i comparing and where do i assign the data?

if ($_ =~ /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{1,5}:/ +) {print MYFILE2 "$_ \n";}

becomes

while <$_> { while ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{1,5}/g) + { @iparray[$iparraycounter] = $1; $iparraycounter++; }}

@iparray now contains just the ip addresses? $_= is the entire page with addresses
@iparray = list of addresses found

THANK YOU AnomalousMonk (P.s. I like the name :)

Your example is easy to follow and almost understood ... :)

I am abit confused as to where to insert the regex however.

p.s. Yup i am aware it will do 999. It will get kicked out later though. when i do a verify site is up.

I did try adding the following code but got an error:

my $str = "br>94.198.240.132:60988 asdfasdf 174.142.24.201:3128 asdfas +dfasdf"; if (my @matches = $str =~ m{ ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0- +9]{1,3}:[0-9]{1,5}) }xmsg) { print qq{matched @matches}; }
Invalid [] range "0-" in regex; marked by <-- HERE in m/ ([0-9]{1,3}\. +[0-9]{1,3}\.[0-9]{1,3}\.[0-<-- HERE +9]{1,3}:[0-9]{1,5}) / at C:\CC\BUY\ptest.pl line 43.

I Tried removing the enclosing ()

$str =~ m{ [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0- +9]{1,3}:[0-9]{1,5} }xmsg)
= same error

I Tried adding / /

$str =~ m{ /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0- +9]{1,3}:[0-9]{1,5}/ }xmsg)
= same error

Sorry will add a new message next time


In reply to Extracting IP address from large text file. by Monkomatic

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.