0

$ ip route get 255.255.255.255

ブロードキャスト 255.255.255.255 dev eth0 src 192.168.223.129

私が192.168.223.129知っているのは、sedコマンドを使用する必要があるということだけです。また、使用したコマンドについて教えてください。

4

5 に答える 5

3

テキストを抽出する場合、最初に表示されるのは grep/ack です。

これを試して:

ip route get 255.255.255.255|grep -oP '(?<=src ).*'
于 2013-01-05T16:38:57.497 に答える
3

grepこれは、これを行うための最も単純で最も適したツールであるパターン マッチングの問題です。

一致させようとしているのは、単語に続く IP アドレスsrcです。この正規表現を使用して IP アドレスを照合し、(\d{1,3}.){4}の後読みを使用して、IP アドレスが次のような単語に続くことを確認できます。src(?<=src )

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

肯定先読みを使用するには、perl 正規表現grepのフラグを使用する必要があり、フラグは、一致を含む行全体を表示するのがデフォルトの動作であるため、行の一致する部分のみを表示するように指示します。-P-ogrepgrep

このソリューションはip route get 255.255.255.255、単語の後に続く IP アドレスを検索しているための出力とは無関係でsrcあり、最初の行の最後の単語であるなどの出力の形式に依存していません。

于 2013-01-05T17:09:34.353 に答える
2

代わりに AWK を使用する

この問題は、AWK を使用すると簡単に解決できます。宿題ではないと仮定して、仕事に適したツールを使用してください! たとえば、後で使用するために IP アドレスを変数に格納するには、次のようにします。

ip_address=$(
    ip route get 255.255.255.255 |
    awk '{print $NF; exit}'
)

その後、新しい変数を介して値にアクセスできます。例えば:

$ echo "$ip_address"
192.168.1.1
于 2013-01-05T16:47:22.200 に答える
1

sed を使用すると、次のように実行できます。

ip route get 255.255.255.255 | sed -n '/src/ s/.*src //p'

-n出力を抑制します。この/src/ビットは、置換s///および印刷pコマンドを実行するラインを選択します。置換コマンドs/.*src //は、それまでのすべてを削除しますsrc(末尾のスペースに注意してください)。

于 2013-01-05T16:21:47.610 に答える
1

out なしで実行できる場合はsed、次のように動作します: Output ofip route

[aman@aman ~]$ ip route get 255.255.255.255
broadcast 255.255.255.255 dev wlan0  src 192.168.1.4 
    cache <local,brd> 

ipアドレスの取得

[aman@aman ~]$ ip route get 255.255.255.255|head -1|cut -f7 -d' '
192.168.1.4
于 2013-01-05T16:17:34.100 に答える