PowerShell Regex для фильтрации универсального файла сравнения - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть diff-файл, который я добавляю в скрипт, и хочу сопоставить только по изменениям - меня не волнуют строки контекста или пути к файлам;они не имеют значения.

--- \\path\to\file2.txt 2018-12-27 12:11:20.000000000 -0600
+++ \\path\to\file2.txt 2018-12-27 12:11:24.000000000 -0600
@@ -259,13 +259,12 @@
 18684944<tab>10-01-20<tab>5.00
-21400198<tab>12-03-18<tab>75.21
 18684944<tab>10-11-20<tab>5.00
@@ -333,13 +332,12 @@
 26085691<tab>12-17-19<tab>144.28
-21400541<tab>12-03-18<tab>72.30
 21400541<tab>01-03-19<tab>72.30

$p = @("^\+[.]*$", "^-[.]*$")
Get-Content $file| Select-String -Pattern $p

Ожидаемый результат - переменная, содержащая:

-21400198<tab>12-03-18<tab>75.21
-21400541<tab>12-03-18<tab>72.30

Я ужасен в регулярных выражениях и после возни с различными выражениями выкладываю это здесь.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

вот еще один способ сделать это.я не мог найти регулярное выражение, которое работало на всех вариантах, перечисленных в ссылке LotPings, поэтому я пошел со строковыми операторами.это, вероятно, намного медленнее, чем решение с регулярным выражением, но, похоже, работает.[ ухмылка ]

# fake reading in a text file as one multiline string
#    in real life, use Get-Content -Raw
$InStuff = @'
--- \\path\to\file2.txt 2018-12-27 12:11:20.000000000 -0600
+++ \\path\to\file2.txt 2018-12-27 12:11:24.000000000 -0600
@@ -259,13 +259,12 @@
 18684944<tab>10-01-20<tab>5.00
-21400198<tab>12-03-18<tab>75.21
 18684944<tab>10-11-20<tab>5.00
@@ -333,13 +332,12 @@
 26085691<tab>12-17-19<tab>144.28
-21400541<tab>12-03-18<tab>72.30
 21400541<tab>01-03-19<tab>72.30
'@

$ChangeLines = $InStuff -split '@@.+@@' |
    # get rid of any blank items from the split
    Where-Object {$_} |
    # leave out the header info
    Select-Object -Skip 1 |
    # split the context/change block into lines
    #    take the ones that start with either "+" or "-"
    ForEach-Object {
        ($_ -split [environment]::NewLine).Where({$_ -match '^[-+].+$'})
        }

$ChangeLines

вывод ...

-21400198<tab>12-03-18<tab>75.21
-21400541<tab>12-03-18<tab>72.30
0 голосов
/ 28 декабря 2018

Вы можете использовать:

^[-+][0-9].*

Регулярное выражение даст вам любую строку, начинающуюся с + ИЛИ, за которой следует число

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...