Powershell在找到另一个字符串后提取字符串

时间:2016-03-04 16:16:37

标签: string powershell findstr select-string

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

该文件的行是这样的:

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

我可以找到&#34;数据源=&#34;,但我想返回&#34; xxxxxx&#34;。以下是我正在使用的内容:

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

这给了我整个&#34;添加键&#34;从上面开始。

提前感谢您的帮助!

编辑:感谢您的回复。在做了一些挖掘之后,它看起来像是更合适的&#34;方法实际上是使用[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]允许我调用特定元素。如果拆分中有多个分隔符,则会中断任何分隔符的输入。也许这可以在将来帮助别人。

感谢所有帮助,伙计们!

2 个答案:

答案 0 :(得分:2)

就个人而言,我只是获取属性的值 - 可能使用带有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'

答案 1 :(得分:2)

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

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