Shell

返回動態 ping 的子字元串

  • March 29, 2021

當我執行時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

引用自:https://unix.stackexchange.com/questions/642699