/proc/net/dev
スペースで区切られた2番目の列と10番目の列の内容を抽出する必要があります。つまり、受信および送信されたバイト数です。
grep
逆参照を使用してこれを実行できますか?
答え1
あなたの質問に答えてください:
awk '{print $2,$10}' /proc/net/dev
生産する
Receive
|bytes packets
6385384218 42314607745
12034420041 12034420041
これはあなたが望むものではないかもしれません。
あなたはそれを使用することができます
awk '$1 ~ /:/ {print $2,$10}' dev
6385389751 42314610935
12034420241 12034420241
どこ
$1 ~ /:/
最初のフィールドがfooの行を選択します。{print $2,$10}
2番目と10番目のフィールドの印刷
grep
- grep を使用すると、正規表現に一致する数値を選択できます。
/proc/dev/net
- しかし、正規表現は説明はしますが、実行することはできません。
つまり、次に適用される正規表現は表示されません。単一のgrepコマンドそれから送信されます
eth0: 6385654376 26986310 0 107680 0 0 0 4665 42314947519 21475282 0 0 0 0 0 0
lo: 12034424441 4553238 0 0 0 0 0 0 12034424441 4553238 0 0 0 0 0 0
(不正確な数字)
6385389751 42314610935
12034420241 12034420241
使用grep FOO
これにはFOO
grepのオプションとパラメータのみが含まれています。
@Emericの試みで私のOSで実行すると、2つの列がある可能性があります。
6385672702
42314983073
12034425441
12034425441
しかし、幸運を試してみることができます。https://codegolf.stackexchange.com/
答え2
それがすべてであれば、grep
次のことを試してください。
grep -Eo '[^ ]+:( *[0-9]*){9}' /proc/net/dev | grep -Eo '(: *[0-9]*|[0-9]*$)' | grep -o '[0-9]*'
137517672
9029195
- 最初の式はインターフェイス名+コロンを印刷し、次の9つの数値セットを印刷します。
- 2番目の式は、コロンで始まる行の終わり(最初と最後に選択した列)で終わる数値のグループのみを抽出します。ここで、行は一致する列ごとに 1 つの行に分割されます。
- 最後の式には前のコロンが削除されました(ここには政治的な内容はありません。)。
先に指摘したように、grep
これはこの目標を達成するための最良の方法とは異なります。