這里是初學者,我正在處理錯誤日志檔案和庫,當前我正在進行的步驟是從 txt 檔案中提取特定資訊。
我目前擁有的代碼是...
$StatusErr = "Type 1","Type 2"
for ($i=0; $i -lt $StatusErr.length; $i ) {
get-content C:\blah\Logs\StatusErrors.TXT |
select-string $StatusErr[$i] |
add-content C:\blah\Logs\StatusErrorsresult.txt
}
當它作業時,我需要它顯示為
Type-1-Description
2-Description
Type-1-Description
2-Description
Type-1-Description
2-Description
等等
它目前顯示為
Type 1 = Type-1-Description
Type 1 = Type-1-Description
Type 1 = Type-1-Description
Type 2 = 2-Description
Type 2 = 2-Description
Type 2 = 2-Description
我不確定如何更改排列并洗掉不需要的空格和 = 號
uj5u.com熱心網友回復:
您需要在一次呼叫中搜索這兩種模式,以便按順序獲得匹配行。
Select-String- 雖然該
-Pattern引數確實接受一組模式,但在這種情況下,單個正則運算式就可以了。
- 雖然該
您需要使用正則運算式模式才能僅捕獲和輸出匹配的部分行。
$StatusErrRegex = '(?<=Type [12]\s*=\s*)[^ ] '
get-content C:\blah\Logs\StatusErrors.TXT |
select-string $StatusErrRegex |
foreach-object { $_.Matches.Value } |
set-content C:\blah\Logs\StatusErrorsresult.txt
請注意,我已替換add-content為set-content,因為我假設您不想附加到預先存在的檔案。將通過管道接收到的所有set-content物件寫入輸出檔案。
Select-String輸出其屬性提供對匹配行部分的訪問的Microsoft.PowerShell.Commands.MatchInfo實體。.Matches
有關正則運算式的解釋以及使用它進行試驗的能力,請參閱此 regex101.com 頁面。
補充說明:
Select-String與一般的 PowerShell 一樣,默認情況下不區分大小寫;如果需要,添加-CaseSensitive開關。(?<=...)是一個(肯定的)lookbehind 斷言,其匹配文本沒有成為正則運算式捕獲的內容的一部分。\s*匹配零個或多個空白字符;\s會匹配一個或多個。[^ ]匹配一個或多個不是空格 ( ) 的 () 字符,從而捕獲符號右側的一系列非空格字符。^=要匹配模式開頭的多個單詞中的任何一個,請使用正則運算式替換(
|),例如'(?<=(type|data) [12]\s*=\s*)[^ ] '
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/536689.html
標籤:电源外壳解析
