情况
我有一个文件,其中每一行都有一个 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
$