#author("2017-09-22T22:05:25+09:00","","")

#navi(../)
* テキストファイルからIPアドレスのみ抽出する方法 [#sa77c66b]
シェルスクリプトや設定ファイル内に記述されているIPアドレス(IPv4)を抜き取る方法を以下に記します。~
紹介するコマンドはgrepとawkになります。

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)


* grepコマンドでIPアドレスを抽出する [#ke62177f]
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を使って抽出してみる [#x64d0224]
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)のみを抜き出すコマンド例でした。

#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS