PowerShell Regex过滤通用差异文件

时间:2018-12-27 21:11:33

标签: regex powershell match

我有一个差异文件,正在将其放入脚本中,并且只希望在更改时进行匹配-我不在乎上下文行或文件路径;它们无关紧要。

--- \\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

我在regex上很糟糕,并且在忙于各种表情之后将其放在这里。

2 个答案:

答案 0 :(得分:0)

您可以使用:

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

正则表达式将为您提供以+或-开头的任何以数字开头的行

Demo

答案 1 :(得分:0)

这是另一种方法。我无法解决一个正则表达式,它可以处理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