grep

grep

/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

  1. grep を使用すると、正規表現に一致する数値を選択できます。/proc/dev/net
  2. しかし、正規表現は説明はしますが、実行することはできません。

つまり、次に適用される正規表現は表示されません。単一の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

これにはFOOgrepのオプションとパラメータのみが含まれています。

@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これはこの目標を達成するための最良の方法とは異なります。

関連情報