出力から数字のみを抽出するコマンド

出力から数字のみを抽出するコマンド

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

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

上記のコマンドの出力:

Tot Pkt Lost       : 1083761951

Tot Pkt 不足している数だけ抽出するコマンドが必要です。

答え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

この場合、拡張正規表現を使用しないため、-Ewithを使用する必要はありません。grepリモートシステムではなくローカルシステムでワイルドカードモードを拡張することもできます。これにより、誤った結果が生じる可能性があります。

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

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

ここでは正規表現ではなく文字列を一致させるため、-Fwithを使用しています。grepまた、ワイルドカードパターンがローカルではなくリモートホストで拡張されるようにリモートホストで実行する必要があるコマンドを引用しました。

これにより、同じ出力が提供されます。

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これは各行の先頭とそれに続く文字列と一致します。一致する文字列を削除し、残りの行を印刷します。他のすべてのデータは削除されます。

関連情報