我想通过读取PowerShell中文件的每一行来提取两个字符串中的任何一个。
示例:
desc.txt
包含:
Description : Attaching new instance: inst-id
Description : Detaching new instance: inst-id
Description : Launching new instance: inst-id
我想逐行读取desc.txt,如果该行有"附加"则选择inst-id。或"启动"。
我可以通过以下代码在两者中只提取一个字符串:
$b=Get-Content .\desc.txt
$b | Select-String -SimpleMatch "Launching"
输出:
Description : Launching a instance: inst-id
答案 0 :(得分:1)
如果要匹配多个字符串,则需要使用正则表达式。根据{{3}},参数-SimpleMatch不支持正则表达式。因此,您需要使用-Pattern参数。
以下是匹配“启动”和“附加”的完整示例:
$FileName = [System.IO.Path]::GetTempFileName()
@"
Description : Attaching new instance: inst-id
Description : Detaching new instance: inst-id
Description : Launching new instance: inst-id
"@ | Out-File -FilePath $FileName
Get-Content -Path $FileName | Select-String -Pattern "Attaching|Launching"
Remove-Item -Path $FileName
答案 1 :(得分:1)
既然你说要从行中提取inst-id
部分我会做这样的事情:
Get-Content .\desc.txt |
? { $_ -match '(?:Attaching|Launching).*:\s+(.*)$' } |
% { $matches[1] }