【问题标题】:Using a variable within a PowerShell Select-String在 PowerShell 选择字符串中使用变量
【发布时间】:2015-09-18 16:16:50
【问题描述】:

我的 PowerShell 脚本的这一部分是我目前卡在上面的。基本上,我有两个文件要通过选择字符串进行比较...详细说明

对于 FileA.txt 中的每个项目,我想对 FileB.txt 执行一个选择字符串以发现它是否存在。如果 FileA.txt 中的行项目在 FileB.txt 中不存在,则将 FileA.txt 行项目打印到屏幕上。

这就是文本文件的样子……或多或少

文件A.txt

1
2
3
4
6

文件B.txt

6
7
8
9
10

所需的输出如下:

1
2
3
4

这就是我的 PS 代码现在的样子。我的想法是我可以在选择字符串中使用该变量,但它不适合我:(

$IPs = Get-Content "C:\\FileA.txt" 

Get-Content C:\FileB.txt | Select-String -InputObject $IPs

有人可以帮助我并指出我做错了什么。

【问题讨论】:

  • 我猜这些文件最终会包含 IP 地址?他们会在同一行还是一行一行?
  • 更正文件将包含 IP 地址。他们将逐行...在列表中。

标签: powershell select-string


【解决方案1】:

根据您有限的样本数据,这里有一个示例说明您可以如何做到这一点:

"1 2 3 4 6" > "fileA.txt"
"6 7 8 9 10" > "fileB.txt"

$arrayA = (Get-Content "fileA.txt").Split(" ")
$arrayB = (Get-Content "fileB.txt").Split(" ")

$arrayResult = @()

foreach($valueA in $arrayA) {
    if($arrayB -notcontains $valueA) {
        $arrayResult += $valueA
    }
}

$arrayResult -join " "

现在我相信输入文件最终会完全不同

编辑:

使用换行符:

"1
2
3
4
6" > "fileA.txt"

"6
7
8
9
10" > "fileB.txt"

$arrayA = Get-Content "fileA.txt"
$arrayB = Get-Content "fileB.txt"

$arrayResult = @()

foreach($valueA in $arrayA) {
    if($arrayB -notcontains $valueA) {
        $arrayResult += $valueA
    }
}

$arrayResult -join "`n"

注意:这 2 个脚本从填充所需文件开始,我猜你不需要这样做

【讨论】:

  • 我刚刚编辑了他的问题,看起来他的意思是让文件中的每个值都在自己的行上,只是在帖子中没有这样显示(他的换行符不是' t 被解释)。
  • 编辑了我的答案以反映这一点:)
  • Get-Content 默认返回一个行数组,因此不再需要.Split(),但其他看起来不错,+1
  • 我觉得我做错了,你是对的 / 最初的样本数据让我这样做了 :),谢谢
  • 如果您愿意,您可以通过点击左侧投票附近的勾选来接受答案
【解决方案2】:

在这个特定的例子中,Compare-Object 可能是一个更好的选择。它旨在找出两个列表之间的差异。

你会使用类似的东西:

Compare-Object -ReferenceObject $(gc .\FileA.txt) -DifferenceObject $(gc .\FileB.txt) | where { $_.SideIndicator -eq '<=' } | select -expand InputObject

不过,您也可以使用 select-string 来做到这一点:

gc .\FileA.txt | select-string -Pattern $(gc .\FileB.txt) -NotMatch

它只是找到与 FileB 的行不匹配的 FileA 的行,但是 FileB 的行被解释为正则表达式,这可能不适合 IP 地址,因为 '.'是通配符。

【讨论】:

  • 我很快就尝试了Compare-Object,但对它的了解还不够充分,无法用它发布答案:) 看起来更干净,但这可能是因为单线/管道样式^^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-10
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多