【问题标题】:Extract Lines between two tags提取两个标签之间的行
【发布时间】:2021-08-24 18:42:33
【问题描述】:

我有以下来自文本文件的示例数据

l1
l2
Start :
a1
a2
a3
-}
l3
l4
l5
Start :
a4
a5
a6
-}

我想提取两个标签“开始:”和-}之间的行

我尝试使用正则表达式提取详细信息,但输出是一行。我想用换行符输出

请帮忙。

【问题讨论】:

标签: powershell


【解决方案1】:

这将获取文本文件的原始内容(这意味着它将拉入回车符和新行)。然后使用该数据执行正则表达式以在“开始:”和“-}”之间提取您想要的数据以提取所有匹配项。然后它只输出找到的每个匹配项的值。如果你想将它存储在一个变量中,你可以在最后一个 foreach 循环中这样做。

$file = Get-Content -path "C:\text.txt" -Raw
$wantedData = ($file | select-string '(?<=Start\s:\n)[\w\s]*(?=-})' -allMatches | 
    foreach {$_.Matches} | Foreach {$_.Value})

【讨论】:

    【解决方案2】:

    可能不是最好的方法,但只要它始终采用这种格式,它就可以工作:

    $i = "l1 l2 Start : a1 a2 a3 -} l3 l4 l5 Start : a4 a5 a6 -}"
    $i = $i.split(':').split('-}')
    
    foreach ($line in $i) {
       if ($line -notlike "*start*" ){ $line.trim() }
    }
    

    【讨论】:

      【解决方案3】:

      在 start 和 -} 之间总是有 3 个值吗?

      如果是,那么:

      $Content = Get-Content -path C:\Text.txt
      $content | Select-String -Pattern "Start :" -Context 0,3 | foreach {$_.Context.DisplayPostContext}
      

      【讨论】:

        猜你喜欢
        • 2011-03-08
        • 1970-01-01
        • 2011-12-31
        • 1970-01-01
        • 1970-01-01
        • 2018-03-16
        • 2016-06-22
        • 2016-02-03
        • 1970-01-01
        相关资源
        最近更新 更多