2015-01-04 4 views
2

Я хочу извлечь любую из двух строк, прочитав каждую строку файла в PowerShell.Выбор двух строк из файла

Пример:

desc.txt содержит:

Description : Attaching new instance: inst-id 
Description : Detaching new instance: inst-id 
Description : Launching new instance: inst-id 

Я хочу читать desc.txt построчно, выберите инсталляционного идентификатор, если линия либо «Установка» или «запускающим».

Я могу извлечь только одну строку между двумя этим кодом:

$b=Get-Content .\desc.txt 
$b | Select-String -SimpleMatch "Launching" 

Выход:

Description : Launching a instance: inst-id 
+0

Вы на правильном пути. Get-Content и Select-String - это именно то место, где я буду искать то, что вы хотите сделать. Теперь вам нужно только фильтр или регулярное выражение, которое дает окончательный результат. –

+0

Спасибо Booga..если вы могли бы помочь в коде, я борюсь за это –

ответ

1

Если вы хотите, чтобы соответствовать более чем одну строку, вы должны использовать регулярное выражение. Согласно description of Select-String, параметр -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

Так как вы сказали, что вы хотите, чтобы извлечь inst-id часть из линий я хотел бы сделать что-то вроде этого:

Get-Content .\desc.txt | 
    ? { $_ -match '(?:Attaching|Launching).*:\s+(.*)$' } | 
    % { $matches[1] } 
Смежные вопросы