4

私は bash スクリプトを開発しており、ON になっているネットワーク インターフェイスから IPv4 アドレスを取得しようとしています。この操作ではip addrsedを使用していますが、 sedから IP を取得できないため、何か問題があります。.

したがって、ある時点でのスクリプトには次のようになります。

ip addr show dev eth0 | grep "inet "

これはおそらく次を返します:

inet 192.168.1.3/24 brd 192.168.1.255 scope global eth0

そしてsedで、私はこれが欲しい:

192.168.1.3/24

いくつかの正規表現を試しましたが、エラーまたは空白行しか表示されません! どうすればこれを達成できますか?

4

5 に答える 5

4

これを試して

ip addr show dev eth0 | sed -nr 's/.*inet ([^ ]+).*/\1/p'

編集:要求された説明の言葉。

-n in sed suppressed automatic printing of input line
-r turns on extended regular expressions




s/.*inet ([^ ]+).*/\1/p

何かの後に inet とスペースが続くものを検索し、そのスペースの後のスペースではないすべての [かっこ] を記憶し、その後に何かが続くものをすべて記憶したもの [\1] (IP アドレス) に置き換えてから、出力します。その行(p)。

于 2013-04-12T21:50:22.617 に答える
1

あなたがsedを求めたことは知っているので、GNU sedバージョン4.2.1を使用して機能する回答を次に示します。それは本当に具体的で、必要なものに対して非常に焼き過ぎです。あなたのコマンドに基づいて、ip addr showこれは Linux だと思います。

ip addr show dev eth0 \
  | sed -n '/^\s\+inet\s\+/s/^\s\+inet\s\+\(.*\)\s\+brd\s.*$/\1/p'`

awk を使用した簡単な方法:

ip addr show dev eth0 | awk '$1=="inet" {print $2}'

于 2013-04-12T21:56:03.637 に答える
0

次のようなものを使用できます。

sed -e 's/^[^ ]* //' -e 's/ .*//'
于 2013-04-12T21:51:54.087 に答える
0

まあ、sed と awk の両方の答えはかなり良いです。サブネット マスクなしで IP のみを取得するには、次のようにさらに進めることができます。

ip addr show dev eth0 | sed -nr 's/.*inet ([^ ]+).*/\1/p' **| cut -f1 -d'/'**

また

ip addr show dev eth0 | awk '$1=="inet" {print $2}' **| cut -f1 -d'/'**

また

さらに良い:

ip route get 255.255.255.255 | grep -Po '(?<=src )(\d{1,3}.){4}'

これにより、IP アドレスのみが出力されます。

于 2013-10-18T10:09:31.853 に答える