[英]Extracting a pattern from output of an external command in Powershell
對於我的powershell腳本,我運行一個外部命令並在輸出中查找特定的模式。 例如:
命令“ eraseDevice”給我這樣的輸出:
Erasing Deployment... Erasing sector 0x080a8000
Erasing sector 0x080c1000
Erasing sector 0x080e1000
Erasing sector 0x64010000
Rebooting...
我希望此輸出中的數字為0x080a8000。 我嘗試了以下方法:
eraseDevice | select-string -simplematch -pattern 0x
返回包含十六進制數字的行。 我也嘗試執行以下操作,但是所有這些都返回錯誤:
eraseDevice | select-string -simplematch -pattern 0x -totalcount 1
eraseDevice | (select-string -simplematch -pattern 0x)[4]
eraseDevice | (select-string -simplematch -pattern 0x).split()[4]
所需的輸出:第一行的0x080a8000。 謝謝你的幫助。
您可以使用Select-Object
來僅獲取eraseDevice
的第一行輸出:
eraseDevice | Select-Object -First 1;
然后,將其通過管道傳遞到Select-String
以查找'0x'
后跟正好是八個十六進制字符:
eraseDevice | Select-Object -First 1 | Select-String -Pattern '0x[0-9a-f]{8}'
Select-String
返回MatchInfo
類的實例。 要僅檢索匹配的數字,請訪問Matches
集合的第一個元素的Value
屬性:
eraseDevice `
| Select-Object -First 1 `
| Select-String -Pattern '0x[0-9a-f]{8}' `
| ForEach-Object { $_.Matches[0].Value };
請注意,如果您確實想從輸出的所有行中提取扇區號,則只需從管道中刪除Select-Object
,然后保留其余命令不變。
$r = [regex] "(0x[0-9a-f]+)"
$line = (eraseDevice | select -first 1)
$num = $r.match($line).groups[1].value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.