PowerShell:需要获取两行/两行之间的值



我有一个.txt文件,它的结构是这样的。

Configure text Example
Configure text Example
Configure text Example
---Start of Data---
Data I want to grab
Data I want to grab
Data I want to grab
Data I want to grab
---End of Data---

对我来说,获取两行之间的数据的最佳方式是什么(Start of data &数据结束)?

Regex似乎是你最好的选择。

$file = "data.txt"
$pattern = "---Start of Data---([sS]*?)---End of Data---"
$string = Get-Content $file -Raw
$result = [regex]::match($string, $pattern).Groups[1].Value

$result将包含您需要的输出。

除了Yash的回答,这里有一些有趣的东西,你可以用switch做,如果你想捕捉不同的部分或部分,可以通过一些开始和结束行

$text = @'
Configure text Example
Configure text Example
Configure text Example
---Start Part A---
Data I want to grab
Data I want to grab
Data I want to grab
Data I want to grab
---End A---
Some other text that isn't needed
Some other text that isn't needed
---Start Section B---
Data I want to grab in B
Data I want to grab in B
Data I want to grab in B
Data I want to grab in B
Data I want to grab in B
---End B---
'@ -split 'r?n'
$inside = $false
$pattern = '---(?:Start|End) ?(D+?)---'
switch -Regex ($text) {
$pattern {
$inside = !$inside
$section = $Matches[1]
}
default {
if ($inside) {
[PSCustomObject]@{
Section = $section
Line = $_
}
}
}
}

输出
Section   Line
-------   ----
Part A    Data I want to grab
Part A    Data I want to grab
Part A    Data I want to grab
Part A    Data I want to grab
Section B Data I want to grab in B
Section B Data I want to grab in B
Section B Data I want to grab in B
Section B Data I want to grab in B
Section B Data I want to grab in B

最新更新