How do you extract IP addresses from files using a regex in a linux shell?

前端 未结 19 1669
被撕碎了的回忆
被撕碎了的回忆 2020-11-28 02:43

How to extract a text part by regexp in linux shell? Lets say, I have a file where in every line is an IP address, but on a different position. What is the simplest way to e

19条回答
  •  执笔经年
    2020-11-28 03:27

    I usually start with grep, to get the regexp right.

    # [multiple failed attempts here]
    grep    '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*'                 file  # good?
    grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' file  # good enough
    

    Then I'd try and convert it to sed to filter out the rest of the line. (After reading this thread, you and I aren't going to do that anymore: we're going to use grep -o instead)

    sed -ne 's/.*\([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\).*/\1/p  # FAIL
    

    That's when I usually get annoyed with sed for not using the same regexes as anyone else. So I move to perl.

    $ perl -nle '/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ and print $&'
    

    Perl's good to know in any case. If you've got a teeny bit of CPAN installed, you can even make it more reliable at little cost:

    $ perl -MRegexp::Common=net -nE '/$RE{net}{IPV4}/ and say $&' file(s)
    

提交回复
热议问题