僅從輸出中提取數字的命令

僅從輸出中提取數字的命令

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'

我在這裡使用-Fwithgrep是因為我匹配的是字串,而不是正規表示式。我還引用了應在遠端主機上執行的命令,以便在此處擴展通配模式,而不是在本地擴展。

這應該給你相同的輸出:

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每行開頭及其後面的字串。它將刪除匹配的字串並列印該行的其餘部分。所有其他數據都將被丟棄。

相關內容