我有一个文本文件,
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
答案 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=697
,4=697
和$find
存储在foreach
中。
第一次$i
循环运行时,698=697
为Select-String
,而$Read_INI
在foreach
中找到该行一次。
$i
循环第二次运行,4=697
为Select-String
,而$Read_INI
在{{1}}中找到两行行。
第三次运行是第二次运行的重复,因此两个值都输出两次
答案 1 :(得分:1)
试试这个
Get-Content "C:\temp\config.ini" | ConvertFrom-String -Delimiter "=" | where P2 -EQ 697