行の中のある文字列の抜出し方

OKWave 2007年08月08日 13時00分

  • このエントリーをはてなブックマークに追加
行の中のある文字列の抜出し方

よろしくお願いいたします。

ある行があった時に

inet 192.168.11.3 netmask 0xffffff00 broadcast 192.168.11.255

IPだけ(ここでは192.168.11.3)抜き出したいのです。

また

default 192.168.11.1 UGSc 17 5 en0

の時も同様で、(これはデフォゲなのですが、192.168.11.1だけ)抜き出したいのです。

次も同じで

domain odn.ne.jp

で、ドメイン名(odn.ne.jpのみ)抜き出したいのです。

また

nameserver 192.168.11.1
nameserver 192.168.11.1

のように2行がヒットした時に
先頭行のアドレス(192.168.11.1)のみを抜き出したいのです。

以上のような
1行の中の特定の部分、複数行ある時の指定行の特定の部分を抜き出す関数やシェルスクリプトを教えて下さい。

環境はFreeBSDでbashです。

よろしくお願いいたします。

良回答

>ifconfig rl0
>cut -d" " -f 2
OS Xは使用していないので分かりませんが、普通UNIX系OSだと「man コマンド名」(man ifconfig とか man cut)でコマンドの説明が表示されるのですが表示されませんか?

>ifconfig rl0
ifconfigコマンドを引数なしで実行すると存在する全てのインタフェースについて表示されます。

%ifconfig
bge0: flags=8843 mtu 1500
options=1b
inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
inet 192.168.1.2 netmask 0xffffffff broadcast 192.168.1.2
ether --:--:--:--:--:--
media: Ethernet autoselect (1000baseTX )
status: active
rl0: flags=8843 mtu 1500
options=8
inet XXX.XXX.XXX.XXX netmask 0xfffffc00 broadcast YYY.YYYY.YYY.YYY
ether --:--:--:--:--:--
media: Ethernet autoselect (100baseTX )
status: active
lo0: flags=8049 mtu 16384
inet 127.0.0.1 netmask 0xff000000

上記だとインタフェースのbge0、rl0、lo0が表示されています。

ifconfigコマンドの引数にインタフェースを指定するとその指定したインタフェースの情報のみ出力されます。

%ifconfig rl0
rl0: flags=8843


回答

単純に cut コマンドを使ってみてはどうでしょうか。

% ifconfig rl0| grep "inet " | cut -d" " -f 2
192.168.0.6

手元のFreeBSD5.5ではこんな結果になります。

解はたくさんあると思います。

  • このエントリーをはてなブックマークに追加
関連キーワード
OS

SpecialPR