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

test.txt

| 94.17.166.233:5060 | unknown | disabled | + | 94.17.201.7:5060 | unknown | disabled | + | 94.17.238.174:5060 | unknown | disabled | + | 94.17.25.93:5060 | unknown | disabled | + | 94.17.174.32:5070 | unknown | disabled | + | 94.17.153.2:5080 | unknown | disabled | + | 94.17.253.74:9999 | unknown | disabled | + | 94.17.78.65:5060 | unknown | disabled | + | 94.17.116.247:5060 | unknown | disabled | + | 94.17.201.223:5060 | unknown | disabled | + | 94.17.194.127:5060 | unknown | disabled | + | 94.17.157.165:5060 | unknown | disabled | + | 94.17.160.92:5060 | unknown | disabled | + | 94.17.248.40:5060 | unknown | disabled |

From the above text file, I want to grep only IP:port as shown below.

94.17.166.233:5060 94.17.201.7:5060 94.17.238.174:5060 94.17.174.32:5070

can someone help me with a code ?

Replies are listed 'Best First'.
Re: How to grep some string(IP:port) from text file and print into txt file
by Laurent_R (Canon) on Mar 02, 2017 at 17:54 UTC
    Do you really want to grep your input? Grepping the input would essentially means to filter out some lines and keep the others. It seems (although your post is not entirely clear about what you want) that you only want to keep the first "field".

    Here's a possible oneliner doing that:

    $ echo ' > | 94.17.166.233:5060 | unknown | disabled | > | 94.17.201.7:5060 | unknown | disabled | > | 94.17.238.174:5060 | unknown | disabled | > | 94.17.25.93:5060 | unknown | disabled | > | 94.17.174.32:5070 | unknown | disabled | > | 94.17.153.2:5080 | unknown | disabled | > | 94.17.253.74:9999 | unknown | disabled | > | 94.17.78.65:5060 | unknown | disabled | > | 94.17.116.247:5060 | unknown | disabled | > | 94.17.201.223:5060 | unknown | disabled | > | 94.17.194.127:5060 | unknown | disabled | > | 94.17.157.165:5060 | unknown | disabled | > | 94.17.160.92:5060 | unknown | disabled | > | 94.17.248.40:5060 | unknown | disabled | > > ' | perl -ne ' > print "$1\n" if /\|\s+([\w.:]+)\s+/; > ' 94.17.166.233:5060 94.17.201.7:5060 94.17.238.174:5060 94.17.25.93:5060 94.17.174.32:5070 94.17.153.2:5080 94.17.253.74:9999 94.17.78.65:5060 94.17.116.247:5060 94.17.201.223:5060 94.17.194.127:5060 94.17.157.165:5060 94.17.160.92:5060 94.17.248.40:5060
    If that's not what you want, please explain more.
      ooops:
      $ echo '| foo:bar ' | perl -nle'print for /\|\s+([\w.:]+)\s+/;' foo:bar
Re: How to grep some string(IP:port) from text file and print into txt file
by haukex (Archbishop) on Mar 02, 2017 at 17:27 UTC

    This seems to be a repeat of your post from an hour ago (just this time with input and output data instead of VBS code), to which I already replied with one solution.

Re: How to grep some string(IP:port) from text file and print into txt file
by hippo (Archbishop) on Mar 03, 2017 at 09:18 UTC

    I was going to suggest that this

    perl -lane 'print $F[1] if $. < 5;' test.txt

    will perform to the spec. However I then noticed that for some reason you didn't want the 4th line of input to match and I cannot spot why that would be the case. Perhaps there is an error in your spec? Consider How to ask better questions using Test::More and sample data.