我喜歡以前的答案,而是想告訴你一個簡單的方法可用,如果你可以安裝WMF/PowerShell的版本5
此版本增加了所謂的ConvertFrom-String
一個超級強大的新工具。這使用FlashExtract(在Excel中找到)和一個輸入示例文件來智能地從任何給定的輸入中提取值。
如果你想寫一些真的簡潔的代碼,你可以使用這種方法。要製作一個輸入示例文件,只需將您的預期輸出複製並粘貼到記事本中即可。
Current query set
name: srv-comms-xx;
name: easrv00xxx;
name: ealxsrv00xxx;
接下來,請記下您要選擇的值(在我們的例子中是服務器名稱)。現在,列表中的前幾個服務器名稱將大括號,名稱稱爲提取值,然後在您想要的末尾加上一個大括號。這是一個例子。
Current query set
name: {name*:srv-comms-xx};
name: {name*:easrv00xxx};
name: ealxsrv00xxx;
注意*,它告訴ConvertFrom-String每當我們看到這個值時創建新的對象。
所以,這是我們的示例文件。現在將它保存在某個地方(在我的示例中爲T:\ Example.txt),並使用Convertfrom-String調用它。
Get-Content .\output.txt | ConvertFrom-String -TemplateFile T:\example.txt
輸出
name
----
srv-comms-xx
easrv00xxx
ealxsrv00xxx
注意,我們只提供了兩個例子,但PowerShell的很聰明,識別模式和太提取最終的服務器名稱。即使我們的輸入有成千上萬的名字,我們也只需要前三到四行的示例就PowerShell提供足夠的提示來說明我們想要做什麼。
如果你想刮的文件和服務器名稱,只是管只返回到選擇-Expand名稱,像這樣:
Get-Content .\output.txt | ConvertFrom-String -TemplateFile T:\example.txt |
Select-Object -ExpandProperty Name
所以第一行包含'當前查詢set',對不對?以下所有行以[leading _SPACEs_ +]'name:'+ _SPACE_開頭,對吧?如果是這樣,請使用:'>「output_new.txt」(for/F「usebackq skip = 1 tokens = 1,* delims =:」%I in(「output.txt」)do echo%J)' – aschipfl
yes correct Mathias R. Jessen提供的解決方案爲我工作。 – HDemaiter