我有一个差异文件,正在将其放入脚本中,并且只希望在更改时进行匹配-我不在乎上下文行或文件路径;它们无关紧要。
--- \\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上很糟糕,并且在忙于各种表情之后将其放在这里。
答案 0 :(得分:0)
答案 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