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

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ではこんな結果になります。

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

ZDNET Japan 記事を毎朝メールでまとめ読み(登録無料)

ZDNET Japan クイックポール

注目している大規模言語モデル(LLM)を教えてください

NEWSLETTERS

エンタープライズ・コンピューティングの最前線を配信

ZDNET Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]