How to provide grep a file with ip addresses to look for in access.log

Situation

I have a file where each line has an IP address and I want to see if these Ip's are found in access.log

File name: IpAddressess

Contents example :

192.168.0.1
192.168.0.2
192.168.1.5
etc etc

Now I want to scan access.log for these IP addresses contained in the file IpAddressess

Can I use the command grep for this and what would the command structure look like?

Thank you kindly for any assistance!

Answers 2

  • You are looking for the -f option, described in man grep on my Arch Linux system as:

       -f FILE, --file=FILE
              Obtain patterns from FILE, one per line.   If  this  option  is
              used  multiple  times  or  is  combined  with the -e (--regexp)
              option, search for all patterns given.  The empty file contains
              zero patterns, and therefore matches nothing.
    

    However, since grep works with regular expressions and . in regular expressions means "any character", you will also want the -F option, so that 1.2.3 doesn't match things like 10293:

       -F, --fixed-strings
              Interpret PATTERNS as fixed strings, not regular expressions.
    

    Putting the two together, the command you're looking for is:

    grep -Ff IpAddressess access.log
    

  • Yes, use grep -f. Worth adding the -F to that the . character in your patterns doesn't get interpreted as 'any' character.

    -f and -F is explained below

    $ grep --help 2>&1|grep -i '^  \-f'
      -F, --fixed-strings       PATTERNS are strings
      -f, --file=FILE           take PATTERNS from FILE
    $
    

    Example:

    $ cat patterns
    192.168.0.1
    192.168.0.2
    192.168.1.5
    $ cat myaccesslog
    hello 192.168.0.1
    world ! 192.168.0.2
    foobar 192.168.0x1
    $ grep -f patterns myaccesslog
    hello 192.168.0.1
    world ! 192.168.0.2
    foobar 192.168.0x1
    $ grep -Ff patterns myaccesslog
    hello 192.168.0.1
    world ! 192.168.0.2
    $
    

Related Questions