我有一个.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