查找字符串的行号

时间:2017-01-24 20:05:28

标签: powershell

我有一个文本文件,

1=564
698=697
54=445
4=697
664=45
4=697

注意我有两次出现4=697

$INI = '\\hqfs1\users\tantony\PowerShell\CalenderGroup\config.ini'
$Read_INI = Get-Content $INI

$find = $Read_INI | Where-Object {$_ -cmatch "^\d+=697$"}

foreach($i in $find)
{    
    $Read_INI | Select-String -AllMatches "$i" -SimpleMatch
}

以上脚本查找以= 697结尾的数字,这部分有效。

这就是我得到的,它认为我有4个实例4 = 697当我只有2个

698=697
4=697
4=697
4=697
4=697

这就是我想要的

698=697
4=697
4=697 

2 个答案:

答案 0 :(得分:2)

如果您想要行号,请将$INI = '\\hqfs1\users\tantony\PowerShell\CalenderGroup\config.ini' Select-String -Path $INI -Pattern "^\d+=697$" |Select-Object -Expand LineNumber 直接指向该文件:

$INI = '\\hqfs1\users\tantony\PowerShell\CalenderGroup\config.ini'
$Read_INI = Get-Content $INI

$find = $Read_INI | Where-Object {$_ -cmatch "^\d+=697$"}

您的示例中会发生以下情况:

698=697

将字符串4=6974=697$find存储在foreach中。

第一次$i循环运行时,698=697Select-String,而$Read_INIforeach中找到该行一次。

$i循环第二次运行,4=697Select-String,而$Read_INI在{{1}}中找到两行行。

第三次运行是第二次运行的重复,因此两个值都输出两次

答案 1 :(得分:1)

试试这个

Get-Content "C:\temp\config.ini" | ConvertFrom-String -Delimiter "=" | where P2 -EQ 697