sedはパターンが初めて発生しません

sedはパターンが初めて発生しません

猫ファイルには以下が含まれています。

 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

関連情報