簡體   English   中英

使用正則表達式和Powershell提取文本塊

[英]Extract block of text using regex and powershell

我在下面編寫了powershell腳本和正則表達式,以提取第一行(端口名狀態Vlan速度類型)和最后一行(此處結束)之間的文本塊,但是沒有用。 如果您有建議,請幫忙! 謝謝

運行此腳本,它僅返回第一行。

Function Find_Ports($String)

foreach ($File in $Files)
 {
    $Config = Get-Content $File
    $Port =  Select-String -Path $File -Pattern $String | Select - 
     ExpandProperty line | Select-Object -First 1


   if($Port)
     {
       $Port 
     } 
     Else
     {
        Write-Host "no port"
      }   

      }


       Find_Ports " (smi)^Port\s.+Name\s.+Status\s.+Vlan\s.+Duplex\s.+Speed\sType\r\n.*End\Here$"

下面是文本文件

端口名稱狀態VLAN雙工速度類型Gi1 / 1禁用1自動自動10/100 / 1000-TX Gi1 / 2禁用1自動自動10/100 / 1000-TX Gi1 / 3禁用1自動自動10/100 / 1000-TX Gi1 / 4禁用1自動auto 10/100 / 1000-TX Gi1 / 5禁用1自動auto 10/100 / 1000-TX Gi1 / 6禁用150 auto自動10/100 / 1000-TX Po1連接的后備箱a-full a-1000在這里結束

在正則表達式中,您使用\\s.+ ,其中.+將匹配除換行符以外的任何字符。 我認為您的意思是匹配1+個空格字符,這些字符可以寫為\\s+而沒有點。

您還可以轉義\\H ,它可以只是H 您也可以省略不區分大小寫的標志,因為點將匹配大寫和小寫字符。

您的正則表達式可能如下所示:

(?sm)^Port\s+Name\s+Status\s+Vlan\s+Duplex\s+Speed\sType\r\n.*End Here$

正則表達式演示

如果不使用點可以與換行符匹配的選項,則可以使用:

^Port\s+Name\s+Status\s+Vlan\s+Duplex\s+Speed\sType\r\n(?:.*\r\n)*?End Here$

那將匹配

  • ^斷言字符串的開頭
  • Port\\s+Name\\s+Status\\s+Vlan\\s+Duplex\\s+Speed\\sType字面匹配后跟1+空格字符,但在Speed之后僅是單個空格字符
  • \\r\\n匹配CR + LF
  • (?:非捕獲組
    • .*\\r\\n匹配除換行符后跟CR + LF以外的任何字符
  • )*? 關閉非捕獲組並重復0+次非貪婪
  • $字符串的結尾

正則表達式演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM