
猫ファイルには以下が含まれています。
inet addr:192.168.154.102 Bcast:192.168.154.255 Mask:255.255.255.0
inet addr:127.0.0.1 Mask:255.0.0.0
私は次のようにipaddress(192.168.154.102
および127.0.0.1
)を抽出するためにsedを使用しています。
sed -ne 's/.*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/p'
しかし、それは単に以下を提供します:
5.255.255.0
5.0.0.0
答え1
使用awk
:
$ echo "inet addr:192.168.154.102 Bcast:192.168.154.255 Mask:255.255.255.0" | awk '{ split($2, a, ":"); print a[2] }'
192.168.154.102
必ず使用する必要がある場合は、sed
次のようになります。
echo "inet addr:192.168.154.102 Bcast:192.168.154.255 Mask:255.255.255.0" | sed 's#.*addr:\([0-9.]*\).*#\1#g'
192.168.154.102
答え2
問題はスター正規表現はできるだけ貪欲で、できるだけ早く一致するからです。これは単に意味する".*"最初の行の「ほとんどすべて」と一致します。
inet addr:192.168.154.102 Bcast:192.168.154.255 Mask:2
第二に
inet addr:127.0.0.1 Mask:25
だから残りとあなたが得るものを印刷します。
あなたの場合は、次のように、より具体的に説明しようとします。":"区切り記号または接頭辞として使用してください。「住所:」または、すべての文字を削除できますが、削除することはできません。指すそして数字IPv4 アドレスはこれらだけで構成されるからです。次のコマンドを試すことができます。
tr -cd '[0-9. ]' < YOUR_FILE
その後、出力処理を続行できます。
答え3
使用
sed -n '/inet addr:/s/[^:]\+:\(\S\+\).*/\1/p'
コマンドラインでこれを試してください
ifconfig | sed -n '/inet addr:/s/[^:]\+:\(\S\+\).*/\1/p'
出力
192.168.154.102
127.0.0.1
答え4
特定のパターンを把握したい場合は、以下を使用しないことをお勧めします。
awk -F'[: ]' '/inet addr:/{ print $4}' file