このエントリーをはてなブックマークに追加


テキストファイルからIPアドレスのみ抽出する方法

シェルスクリプトや設定ファイル内に記述されているIPアドレス(IPv4)を抜き取る方法を以下に記します。
紹介するコマンドはgrepとawkになります。


grepコマンドでIPアドレスを抽出する

manコマンドでgrepの使い方を確認すると、以下の記述があります。

-E, --extended-regexp
       PATTERN を拡張正規表現 (ERE) として扱います (下記参照)。 
       (-E  オプションは POSIX で規定されています)
-o, --only-matching
        マッチする行のマッチした部分だけを (それが空文字列でなければ) 
        表示します。 マッチした各文字列は、それぞれ別の行に書き出します。

オプション-Eと-oを使うことにより、簡単にIPアドレスを抽出することができます。
実際に/etc/hostsを対象に実行してみます。

$ grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts
127.0.0.1
127.0.1.1
192.168.1.81
192.168.1.82

IPアドレスが抽出できました。
ユニークなIPアドレス一覧や件数がほしいのであれば、sortとuniqやwcコマンドを使えばよいでしょう。
以下に実行例を記します。

$ cat ip.txt 
WWW_HOST1=192.168.1.10
WWW_HOST2=192.168.1.20
SMB_HOST1=192.168.1.10
SMB_HOST2=192.168.1.30
DAV_HOST1=192.168.1.40
DAV_HOST2=192.168.1.50

$ cat ip.txt | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
192.168.1.10
192.168.1.20
192.168.1.10
192.168.1.30
192.168.1.40
192.168.1.50

$ cat ip.txt | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sort | uniq
192.168.1.10
192.168.1.20
192.168.1.30
192.168.1.40
192.168.1.50

$ cat ip.txt | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sort | uniq | wc -l
5

awkを使って抽出してみる

awkのmatch関数で抽出することもできます。
以下に実行例を記します。

$ cat ip.txt 
WWW_HOST1=192.168.1.10
WWW_HOST2=192.168.1.20
SMB_HOST1=192.168.1.10
SMB_HOST2=192.168.1.30
DAV_HOST1=192.168.1.40
DAV_HOST2=192.168.1.50

$ cat ip.txt | awk 'match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) { print substr($0, RSTART, RLENGTH) }'
192.168.1.10
192.168.1.20
192.168.1.10
192.168.1.30
192.168.1.40
192.168.1.50
$ 

以上、テキストファイル内にあるIPアドレス(IPv4)のみを抜き出すコマンド例でした。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-09-22 (金) 22:05:25