2015-07-31 4 views
2

Я пытаюсь извлечь только мои номера проблем JIRA из текстового файла, исключая дубликаты. Это хорошо в Shell скрипт:Powershell, чтобы найти конкретный шаблон

cat /tmp/jira.txt | grep -oE '^[A-Z]+-[0-9]+' | sort -u 

Но я хочу использовать Powershell и попытался это

$Jira_Num=Get-Content /tmp/jira.txt | Select-String -Pattern '^[A-Z]+-[0-9]+' > "$outputDir\numbers.txt" 

Но эта функция возвращает всю строку и не устраняя дубликаты. Я попробовал regex, но я новичок в powershell, не знаю, как именно использовать его. Может кто-то помочь, пожалуйста.

Sample Jira.txt файл

PRJ-2303 Modified the artifactName 
PRJ-2303 Modified comment 
JIRA-1034 changed url to tag the prj projects 
JIRA-1000 for release 1.1 
JIRA-1000 Content modification 

Ожидаемый результат

PRJ-2303 
JIRA-1034 
JIRA-1000 

ответ

2

Должно работать с чем-то вроде этого:

$Jira_Num = Get-Content /tmp/jira.txt | ForEach-Object { 
    if ($_ -match '^([A-Z]+-[0-9]+)') { 
     $Matches[1] 
    } 
} | Select-Object -Unique 

Get-Content читает файл построчно, так что мы можем перетащите его в другие командлеты для обработки каждой строки.

ForEach-Object запускает командный блок для каждого элемента в конвейере. Итак, здесь мы используем оператор -match для выполнения регулярного выражения по строке с группой захвата. Если совпадение выполнено успешно, мы отправляем согласованную группу (ключ выпуска JIRA) по конвейеру.

Select-Object -Unique будет сравнивать объекты и возвращать только уникальные.

+0

Это работало. Спасибо огромное! – VRK

+0

@VRK теперь, когда вы разместили содержимое своего текстового файла, пытаетесь ли вы что-то сделать с git-коммитами и обновлять JIRA-проблемы? У Atlassian есть [бесплатный плагин для BitBucket и GitHub] (https://marketplace.atlassian.com/plugins/com.atlassian.jira.plugins.jira-bitbucket-connector-plugin), но он не работает с GitLab. Недавно моя компания приобрела плагин [GitLab для JIRA] (https://marketplace.atlassian.com/plugins/com.allenta.jira.plugins.gitlab.gitlab-listener), и он работает хорошо (у меня нет связи с ними) , – briantist

+0

Спасибо, бриантист! Я на самом деле пытаюсь получить исправления версий всех проблем JIRA и выполнить аудит, чтобы проверить, соответствуют ли они номер версии исправления текущей версии. Я использую REST API для этого. – VRK

2

Select-String все еще может работать! Проблема исходит из заблуждения возврата объекта. Он возвращает [Microsoft.PowerShell.Commands.MatchInfo], и похоже, что эквивалент ToString() - это вся соответствующая строка. Я не знаю, какую версию PowerShell у вас есть, но это должно сделать трюк.

$Jira_Num = Get-Content /tmp/jira.txt | 
    Select-String -Pattern '^[A-Z]+-[0-9]+' | 
    Select-Object -ExpandProperty Matches | 
    Select-Object -ExpandProperty Value -Unique 

Также вы можете получить нечетные результаты при записи в выходной поток и переменную в одно и то же время. Как правило, лучше использовать Tee-Object в подобных случаях.

Select-String /tmp/jira.txt -Pattern '^[A-Z]+-[0-9]+' | 
    Select-Object -ExpandProperty Matches | 
    Select-Object -ExpandProperty Value -Unique | 
    Tee-Object -Variable Jira_Num | 
    Set-Content "$outputDir\numbers.txt" 

Теперь файл $outputDir\numbers.txt и переменная $Jira_Num содержит уникальный список. $ не использовался с Tee-Object был сделан специально.

+0

+1 для решения с помощью 'Select-String'. Я не знаю, почему мне просто не нравится этот командлет; Я в принципе никогда не использую его, и понимаю, что это совершенно необоснованно. :) – briantist