逆引きUNIXコマンド/テキストファイルからIPアドレスのみ抽出する
の編集
Top
/
逆引きUNIXコマンド
/
テキストファイルからIPアドレスのみ抽出する
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
#navi(../) * テキストファイルからIPアドレスのみ抽出する方法 [#sa77c66b] シェルスクリプトや設定ファイル内に記述されているIPアドレス(IPv4)を抜き取る方法を以下に記します。~ 紹介するコマンドはgrepとawkになります。 #contents #htmlinsert(linux_ads_top.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)のみを抜き出すコマンド例でした。 #htmlinsert(linux_ads_btm.html)
タイムスタンプを変更しない
#navi(../) * テキストファイルからIPアドレスのみ抽出する方法 [#sa77c66b] シェルスクリプトや設定ファイル内に記述されているIPアドレス(IPv4)を抜き取る方法を以下に記します。~ 紹介するコマンドはgrepとawkになります。 #contents #htmlinsert(linux_ads_top.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)のみを抜き出すコマンド例でした。 #htmlinsert(linux_ads_btm.html)
テキスト整形のルールを表示する