AIと戦って、あなたの人生のリスク診断 >>

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

ある行があった時に
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です。

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

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>ifconfig rl0


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

>ifconfig rl0

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


%ifconfig
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=1b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING>
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 <full-duplex>)
status: active
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet XXX.XXX.XXX.XXX netmask 0xfffffc00 broadcast YYY.YYYY.YYY.YYY
ether --:--:--:--:--:--
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000

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

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


%ifconfig rl0
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet XXX.XXX.XXX.XXX netmask 0xfffffc00 broadcast YYY.YYYY.YYY.YYY
ether --:--:--:--:--:--
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active

>ifconfig rl0| grep "inet " | cut -d" " -f 2

rl0のインタフェースが存在しない場合、「ifconfig rl0」では何も表示されないので、その場合には上記の通り実行しても何も表示されません。
rl0の部分をご自分の環境にあるインタフェースに置き換えて実行しないと駄目です。


>cut -d" " -f 2

上記の場合、入力された文字列を" "(スペース/空白)で分割し、2番目の内容を用事すると言うことです。

入力が

>inet 192.168.3.64 netmask 0xffffff00 broadcast 192.168.3.255

だと、" "で区切った場合の1番目が「inet」、2番目「192.168.3.64」、3番目が... になるので、「192.168.3.64」が表示されると言うことです。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
~|cut -d" " -f 2
で正しく表示出来ました。
ありがとうございました。

お礼日時:2006/10/29 21:11

訂正しておきます。



>rl0のインタフェースが存在しない場合、「ifconfig rl0」では何も表示されないので、その場合には上記の通り実行しても何も表示されません。

「「ifconfig rl0」では何も表示されない」と書いてますが、エラーメッセージが出力されます。

あと、何か書店に行って本なり見てUNIXのコマンドの使い方が書かれたものとか買うとかされた方がいいと思いますよ。

○FreeBSD 日本語マニュアル検索 (jman/japropos/jwhatis)
http://www.jp.freebsd.org/man-jp/search.html

ifconfig(8)コマンド
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=m …§=0

cut(1)コマンド
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=m …§=0
    • good
    • 0
この回答へのお礼

早速のご返答ありがとうございます。
MacOSXでのBSDと、本物のUnixではパラメータの書式が
かなり違うんですね。
ありがとうございました。リンクして頂いた本で調べて見ます。

お礼日時:2006/10/27 01:05

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



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

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

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

この回答への補足

ご返信ありがとうございます。
最近スクリプトを始めたのでよく分かっていないのですが、
ifconfig rl0| grep "inet " | cut -d" " -f 2
のままでは上手く行きませんでした。
BSDでも書き方の違いがあるのですね。
ちなみに上のコマンドですが、ご解説願えませんでしょうか。
分かるのはgrepの所だけです。恥ずかしい話ですが・・・
ifconfig rl0 と
cut -d" " -f 2 の意味や使い方をご教授いただけましたら幸いです。

何度もしつこいようですが、周りにスクリプト(と言いますか
UnixやBSDやシェル)が分かる人が居ないので・・

よろしくお願い申し上げます。

補足日時:2006/10/26 19:42
    • good
    • 0
この回答へのお礼

ご返答まことにありがとうございます。
BSD5.5では上手くいくのですね。わたしの環境(MacOSX)では
上手く行きませんでした。Macと言いましても中身はFreeBSDですので
上手く行くと思って、そのまま打ち込んだのですが・・
補足を書かせて頂きました。
何度もすみませんが、初心者なのでよく分からずご教授願えましら
ありがたいです。

お礼日時:2006/10/26 19:50

cat file | grep ... | head -1 | awk '{print $2}'


見たいにやれば、いいのですかね。
cat fileの部分は、何かコマンドに置き換えても大丈夫でしょう。
grep でできるだけ、ヒット件数が少なくなるような行を探し、
head -1で、最初の行だけ取り出す。
で、awk '{ print $2 }'で二番目の項目を取得する。

だいぶ、アホなやりかたかも知れませんが、参考になれば幸いです。

この回答への補足

ご返答ありがとうございます。

補足よろしいでしょうか。
スクリプト化しようとするとawkでエラーが出てしまいます。

コマンドラインからは、
>ifconfig |grep inet |grep -v 127 |grep -v inet6
で、
inet 192.168.3.64 netmask 0xffffff00 broadcast 192.168.3.255
が表示されます。
>ifconfig |grep inet |grep -v 127 |grep -v inet6 |awk '{print $2}'
からは、欲しい情報(ここではIPです)
192.168.3.64
のみ表示されます。

これをスクリプト化しようとして、
***** ppp.pl *****
#!/usr/bin/perl
#!/usr/bin/awk -f
print(`ifconfig |grep inet |grep -v 127 |grep -v inet6 |awk '{print $2}'`);
**********
として、パーミッションを実行可能にして実行すると
awk '{print $2}'
の箇所に対してエラーが出てスクリプト化出来ません。

これは何故でしょうか?

何度も申し訳ありませんが、教えていただけませんでしょうか?

補足日時:2006/10/26 19:33
    • good
    • 0
この回答へのお礼

ご返答のほどありがとうございます。
コマンドラインではうまく特定箇所のみ表示されました。
これをスクリプト化する場合になぜかエラーが出て
うまくいかないのです。
awk の使い方がよく分かっていないからでしょうか?
補足に書かせて頂きました。
よろしければご教授願えませんでしょうか?
よろしくお願いいたします。

お礼日時:2006/10/26 19:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング