状態
各行にIPアドレスを持つファイルがあり、このIPが次の場所にあることを確認したいと思います。access.log
ファイル名:IPアドレス
コンテンツの例:
192.168.0.1
192.168.0.2
192.168.1.5
etc etc
次に、IpAddressessファイルに含まれているIPアドレスのaccess.logをスキャンしたいと思います。
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.
2つを組み合わせると、探しているコマンドは次のようになります。
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
$