3

sed を使用して ifconfig の出力から一部のデータを解析しようとしていますが、正しく解析できません。私が求めている数字だけを抽出するコマンドが欲しいです。

たとえば、送信されたバイトを抽出することに興味があります。

eth1      Link encap:Ethernet  HWaddr 00:00:00:09:15:f7  
      inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
      inet6 addr: fe80::92e2:baff:fe08:35c7/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:75141 errors:0 dropped:0 overruns:0 frame:0
      TX packets:78046 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:9040489 (9.0 MB)  TX bytes:34806464 (34.8 MB)

sed を使用する場合:

ifconfig eth1 | sed 's|.*RX bytes:\([0-9]*\).*|\1|g'

私はこの出力を得る:

eth1      Link encap:Ethernet  HWaddr 00:00:00:09:15:f7  
      inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
      inet6 addr: fe80::92e2:baff:fe08:35c7/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:75141 errors:0 dropped:0 overruns:0 frame:0
      TX packets:78046 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
9040627

しかし、私は「9040627」にしか興味がありません.sedでそれを行う方法はありますか、それともawkまたは他の代替手段を使用する必要がありますか?

編集: 私は busybox バイナリを使用しているため、選択肢が限られています。

4

3 に答える 3

14

ifconfig私見- 出力の標準はありません。システムごと、およびリリースごとに変更される可能性があります。

私があなたなら、/sysファイルシステムを選びます。そこからもすべての情報を取得できます - 後処理は必要ありません。

$ cat /sys/class/net/eth0/statistics/rx_bytes
37016050
于 2012-04-02T13:28:30.510 に答える
10

使用grep:

ifconfig | grep -oP '(?<=RX bytes:)[0-9]*'

使用awk:

ifconfig | awk -F: '/RX bytes/{print $2+0}'
于 2012-04-02T13:01:26.723 に答える
1

デフォルトでは、行に変更を加えた後、sed は入力の各行を出力します。「RXバイト」のある行から何かを印刷したいだけなので、すべての行を印刷しないようにsedに指示します(-n)。したがって、置換を実行する範囲を指定し、一致する行のみを指定してから、置換を実行RX bytesして結果を明示的に出力します。

ifconfig eth1 | sed '/RX bytes/{s|.*RX bytes:\([0-9]*\).*|\1|; p}'
于 2012-04-02T13:12:56.463 に答える