Shell
返回動態 ping 的子字元串
當我執行時
ping example.com
,它會在控制台中列印每次交換的結果。我想過濾每個結果,以便它不顯示所有資訊,而只顯示其中的一個子集。所以,而不是:
PING example.com (93.184.216.34) 56(84) bytes of data. 64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=2 ttl=55 time=1201 ms 64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=3 ttl=55 time=783 ms 64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=4 ttl=55 time=417 ms 64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=5 ttl=55 time=159 ms 64 bytes from 93.184.216.34: icmp_seq=6 ttl=55 time=886 ms
我希望終端列印的結果是:
1201ms 783ms 417ms 159ms 886ms
我會接受
ping
具體的答案,但我更喜歡一個通用的答案,它可以接受任何動態過程並將它返回的每個字元串處理為其他字元串,因為這樣會更通用。我對此特別感興趣的 shell 解決方案,同樣的方法xargs
是 shell 解決方案對某些程序接受管道重定向的限制。
我的建議使用
sed
. 除了您想將某些內容轉換為其他內容之外,我不明白您對動態字元串的含義。大多數過濾器都會這樣做。ping -c 3 1.1.1.1 | sed -En 's/.*=([0-9.]+) ([a-z]+)$/\1\2/p' 32.5ms 34.5ms 37.5ms
不知道“接受任何動態過程”是什麼意思,但是在您的
ping
情況下,您可以將其輸出通過管道傳輸到cut
ping example.com | cut -d= -f4 12.6 ms 11.3 ms 19.4 ms