如何向 grep 提供一个包含要在 access.log 中查找的 IP 地址的文件

如何向 grep 提供一个包含要在 access.log 中查找的 IP 地址的文件

情况

我有一个文件,其中每一行都有一个 IP 地址,我想看看这些 Ip 是否可以在access.log

文件名称:IP地址

内容示例:

192.168.0.1
192.168.0.2
192.168.1.5
etc etc

现在我想扫描 access.log 以查找 IpAddressess 文件中包含的这些 IP 地址

我可以使用该命令grep来实现此目的吗?命令结构会是什么样子?

非常感谢您的帮助!

答案1

您正在寻找该选项,在我的 Arch Linux 系统上-f描述为:man grep

   -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.

但是,由于grep使用正则表达式并且.在正则表达式中意味着“任何字符”,因此您还需要该-F选项,因此它1.2.3与以下内容不匹配10293

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

将两者放在一起,您要查找的命令是:

grep -Ff IpAddressess access.log

答案2

是的,使用grep -f.值得补充的-F是,.模式中的字符不会被解释为“任何”字符。

-f-F解释如下

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

例子:

$ 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
$

相关内容