我只想获得ping返回的最后一个数字:
$s = ping 129.69.1.153 | out-string
$s
if ( $s -match '(?m).+(\d+)ms' ) {
$Matches
}
谷歌告诉(?m)是多线的,而且应该尽可能地贪婪
但我得到的只是第二行的最后一个数字而不是最后一行????
Ping wird ausgeführt für 129.69.1.153 mit 32 Bytes Daten:
Antwort von 129.69.1.153: Bytes=32 Zeit=31ms TTL=51
Antwort von 129.69.1.153: Bytes=32 Zeit=26ms TTL=51
Antwort von 129.69.1.153: Bytes=32 Zeit=27ms TTL=51
Antwort von 129.69.1.153: Bytes=32 Zeit=25ms TTL=51
Ping-Statistik für 129.69.1.153:
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
(0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 25ms, Maximum = 31ms, Mittelwert = 27ms
match: ..
Name Value
---- -----
1 31
0 Antwort von 129.69.1.153: Bytes=32 Zeit=31ms
即使是
$s.Replace("`n","").Replace("`r","")
ping之后和匹配之前的是否匹配第二行的ms?
知道如何以简单的方式解决这个简单的请求吗?
感谢您的回答,但是我喜欢这种方式(s.b.):
$s = ping 129.69.1.153 | out-string
if ( $s -match '(?s).+\D(\d+)ms' ) { $Matches }
(?s)做到了:
Ping wird ausgeführt für 129.69.1.153 mit 32 Bytes Daten:
Antwort von 129.69.1.153: Bytes=32 Zeit=25ms TTL=51
Antwort von 129.69.1.153: Bytes=32 Zeit=27ms TTL=51
Antwort von 129.69.1.153: Bytes=32 Zeit=25ms TTL=51
Antwort von 129.69.1.153: Bytes=32 Zeit=27ms TTL=51
Ping-Statistik für 129.69.1.153:
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
(0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 25ms, Maximum = 27ms, Mittelwert = 26ms
match: ..
Name Value
---- -----
1 26
0 ...
我不知道为什么 - 但它确实有效。
答案 0 :(得分:1)
看起来字符串末尾有一个隐藏空间,这就是正则表达式出现问题的原因。这是有效的,只是测试了它。
($s.trim() | select-string "\d+(?=ms$)").Matches.Value
或者你可以做到这一点,但我认为首先修剪空间会更好
($s | select-string "\d+(?=ms\s*$)").Matches.Value
答案 1 :(得分:0)
如果您有更新的Powershell版本
,可以尝试使用Test-Connection进行试验如果没有,我建议如下(因为正则表达式几乎不是一个好主意)
$Tempfile = [System.IO.Path]::GetTempFileName()
$s = ping 129.69.1.153 | out-file $Tempfile
cat $Tempfile | Select-string "Antwort" | Select -last 1
Remove-item $Tempfile -force
答案 2 :(得分:0)
如果我正在寻找Mittelwert = 27ms
或数字27
,那么因为您正在引用ping中的最后一个数字。
如果是这种情况,您可以在比赛中查找该单词。
$s -match "Mittelwert\s+=\s+(\d+)ms"
或强>
您可以在匹配中使用命名组
$s -match "Mittelwert\s+=\s+(?<Anzahl>\d+)ms"
这样您就可以运行以下代码来代替$matches
$matches.Anzahl