CIDR範囲のグレッピング
ときどき、ApacheログファイルからCIDR範囲をgrepしたいと思います。これは、自然境界(/ 8、/ 16、/ 24)に該当する範囲では簡単ですが、/ 17や/ 25などの他の範囲では簡単ではありません。 例: # 192.168.0.0/16: (easy) grep " 192\.168\." access_log # 192.168.128.0/17: (more thought required) grep -E " 192\.168\.(12[89]|1[3-9][0-9]|2[0-5][0-9])\." access_log # 192.168.0.0/17: (more thought required) grep -E " 192\.168\.([0-9]|[0-9][0-9]|1[01][0-9]|12[0-7])\." access_log # 192.168.128.0/18: (straining my brain) grep -E " 192\.168\.(1[2-8][0-9]|19[01])\." access_log これらの正規表現は、などの先行ゼロを含むIPアドレスを無視します192.168.001.001。これは、Apacheログファイルには問題ではありませんが、他のログファイルにある可能性があります。特にプリンターは先行ゼロを好むようです。オプションのゼロを正規表現に追加するのは簡単ですが、全体を少し難しくするだけです。より簡単な方法が必要です。 CIDR範囲に一致するファイルから行を選択する簡単な方法はありますか? ファンシーな正規表現拡張機能は、さまざまなツール(必要に応じて、awkまたはperl必要に応じて1行にしたいなど)と同様に、作業を容易にするものと見なされます。理想的には、私が望むのは次のようなものです grep "[:CIDR 192.168.128.0/18:]" …