【问题标题】:Powershell to Extract String after finding another stringPowershell在找到另一个字符串后提取字符串
【发布时间】:2016-03-04 16:16:36
【问题描述】:

我正在寻找一种方法来查找文件中的字符串,然后提取该字符串和分隔符之间的所有内容。我可以从文件中取出 LINE,但对于如何从中取出我想要的字符串有点困惑。

文件中的一行是这样的:

<add key="ConnectionString" value="Data Source=xxxxxx;Initial Catalog=Database;Integrated Security=True" />

我可以找到“数据源=”,但我想返回“xxxxxx”。这是我正在使用的:

((Get-Process -Name "db-engine").Path ) + '.Config' | Select-String -Path {$_} - Pattern 'Data Source='

这给了我上面的整个“添加键”行。

提前感谢您的帮助!

编辑:感谢您的回复。在进行更多挖掘之后,看起来“更合适”的方法实际上是使用 [xml] 将文件的内容拉入 xml 对象。然后我可以获取值并使用 split 将数据分解成我需要的块。最终代码将如下所示:

$configpath     = ((Get-Process -Name "db-engine").Path)
$linepath       = $configpath + ".Config"
[xml]$xmlfile   = get-content $linepath
$xmlvalue       = ($xmlfile.configuration.appSettings.add | where {$_.key -eq "ConnectionString"}).value
$server         = $xmlvalue.split(";=")[3]
$db             = $xmlvalue.split(";=")[5]  

仍在解决问题,但这似乎让我走上了正确的道路。 Split 将输入分解为一个数组,因此 [x] 让我可以调用特定元素。在拆分中有多个分隔符时,它会破坏其中任何一个的输入。也许这可以在未来帮助其他人。

感谢大家的帮助!

【问题讨论】:

    标签: string powershell findstr select-string


    【解决方案1】:

    就我个人而言,我只是获取属性的值——可能使用带有 Select-Xml 的 XQuery——然后将其拆分为分号,然后使用ConvertFrom-StringData

    $xml = [xml]'<add key="ConnectionString" value="Data Source=xxxxxx;Initial Catalog=Database;Integrated Security=True" />';
    $ConnectionString = ($xml | Select-Xml -XPath '/add[@key="ConnectionString"]/@value').Node.'#text'
    $DataSource = ($ConnectionString.Split(';') | ConvertFrom-StringData).'Data Source'
    

    【讨论】:

    • 我在我的解决方案中使用了其中的一些元素。我将其添加到已编辑的帖子中。谢谢!
    【解决方案2】:

    我同意@Bacon Bits - 如果您有一个 xml 文件,那么您可能需要考虑这样处理它。如果要使用 Select-String,可以使用 MatchInfo 的捕获组。使用命名组的示例:

     gc .\dataSource.txt | Select-String -Pattern 'Data Source=(?<ds>.+?);' | % { $_.Matches[0].Groups['ds'].Value }
    

    【讨论】:

    • 这是一个有趣的方法。今后我会牢记这一点。谢谢!
    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 2015-04-30
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2021-03-13
    相关资源
    最近更新 更多