出力から数字だけを取り出すコマンド

出力から数字だけを取り出すコマンド

リモート デバイスに SSH 接続し、パケット損失カウンターを取得します。

$ ssh [email protected] cat /proc/net/pf_ring/*eth0* | grep -E "Tot Pkt Lost" 

上記コマンドの出力:

Tot Pkt Lost       : 1083761951

失われた総パケット数だけを取得するコマンドが必要です。

答え1

GNU をお持ちの場合はgrep、次の操作を実行できます。

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' | 
    grep -oP 'Tot Pkt Lost\s*:\s*\K\d+'
1083761951

しかし、awkここではよりシンプルで移植性が高いかもしれません:

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' | 
    awk '/Tot Pkt Lost/{print $NF}'
1083761951

答え2

-Eこの場合、拡張正規表現を使用しないため、 with を使用する必要はありませんgrep。 また、リモート システムではなくローカル マシンでグロビング パターンを展開するため、間違った結果が返される可能性があります。

したがって、コマンドは次のように書き換える必要があります。

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
grep -F 'Tot Pkt Lost'

-Fここでは、正規表現ではなく文字列と一致させるため、 with を使用していますgrep。また、リモート ホストで実行する必要があるコマンドを引用符で囲んでいるため、globbing パターンはローカルではなくリモート ホストで展開されます。

これにより、同じ出力が得られるはずです。

Tot Pkt Lost       : 1083761951

これから数字だけを取得するには、次のように渡しますgrep -E -o '[[:digit:]]+':

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
grep -F 'Tot Pkt Lost' |
grep -E -o '[[:digit:]]+'

あるいは、次のようにしますsed:

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
sed -n 's/^Tot Pkt Lost.*: //p'

Tot Pkt Lostこれは、各行の先頭とその後の文字列と一致します。一致した文字列を削除し、行の残りの部分を出力します。その他のデータはすべて破棄されます。

関連情報