簡體   English   中英

在powershell中在一場比賽之后和不同比賽之前打印行

[英]Print lines after one match and before different match in powershell

我想在某些匹配之后和其他不同匹配之前打印一些行。

使用 awk 我是這樣做的:

awk '/first match/{f=1} f; /second match/{f=0}'

有沒有辦法用 PowerShell 做到這一點?

如果需要輸出第二個匹配行,如果從文件中讀取,可以執行以下操作:

(Get-Content file).Where({$_ -match 'first'},'SkipUntil') | Foreach-Object {
    if ($_ -match 'second') {
        $_; break
    }
    else {
        $_
    }
}

如果您有一個包含行數組的變量 ( $content ),您可以執行以下操作:

$content.Where({$_ -match 'first'},'SkipUntil') | Foreach-Object {
    if ($_ -match 'second') {
        $_; break
    }
    else {
        $_
    }
}

解釋:

Where()方法支持表達式和模式。 由腳本塊{}表示的表達式針對每個管道對象執行。 如果您的輸入是一個數組,則$_將包含每一行的內容。

-match執行不區分大小寫的正則表達式匹配。

模式SkipUntil意味着在表達式為真之前不輸出任何內容。 然后繼續輸出,直到處理完所有數據。

當找到第二個匹配項時,該行將輸出,其余行將停止處理。

基本工作流程如下:

  1. 從索引 0(第 1 行)開始按順序處理輸入內容。
  2. 在找到第一個匹配項之前不捕獲任何內容(表達式的計算結果為真)。
  3. 捕獲的輸出通過管道傳輸到循環中,直到找到第二個匹配項。 輸出包括第二個匹配項。
  4. 找到第二個匹配項后,停止處理數據。

或者,如果您不需要包含第二個匹配的行,代碼會變得更簡潔:

(gc file).Where({$_ -match 'first'},'SkipUntil').Where({$_ -match 'second'},'Until')

暫無
暫無

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

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