シェルの解説全般

sh

コマンドでアクセスログからIPを抽出する

2022年4月1日

シェルコマンドを使ってアクセスログ内にあるIPアドレスを抽出する方法を記載しておきます。

普通「アクセスログ IP 抽出」と検索したらファイル内にあるIPアドレスを切り出す方法を調べたいはずなのに、検索すると、アクセス元IPに対して何件アクセスがあったかのサマリーを出す方法しか出て来ないのが謎でした。

grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /usr/access_log.log | sort | uniq -c

grepコマンドの正規表現を利用して抽出しています。引数の「-E」は正規表現、「-o」は一致した箇所だけを表示するオプションです。

/usr/access_log.logの部分を自分のファイルの場所に直せば利用できます。

grepの後に、パイプラインでソートした結果をユニークなものだけにするようにしていますが、ユニークにしたIPをさらにソートしたい場合は「| sort | uniq -c | sort」のように最後にもう一度sortコマンドを指定すると実現可能です。

自分がどういった表示で出力されていると見やすいかを考慮して実行してみましょう。

  • この記事を書いた人

朝倉卍丸

シングルモルトスコッチなどのお土産を持ってきた人を助けるのが好きです。サービスの分割が重要ですが、まあ昔ながらの方法でやりたいこともありますよね。

よく読まれている記事

条件の0=0は全てが正であるを意味するSQL 1

SQLの条件に0=0のような記述を見かけます。 変わった書き方の条件ですが、これは「全てが正である」事を意味しており、結合条件の場合はCROSS JOINと同じです。 下記の例で言えば、結合するsub ...

DISTINCTを使わないで重複排除を考えるSQL 2

SQLのDISTINCTはEXISTSとかGROUP BYでなんとかする事もできます。 DISTINCTは暗黙的なソートがされますが、何のDBを使うにせよ過去のバージョンならともかく、最近のバージョン ...

RFC 5322に準拠させた正規表現言語別 3

RFC5322で定義されている正規表現を、各言語の正規表現に変化させた形になります。 完全な電子メール正規表現は存在しないので、結局のところ何かの公式基準に従っていたとしても、自分が携わるサービスのル ...

-sh