[英]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
意味着在表達式為真之前不輸出任何內容。 然后繼續輸出,直到處理完所有數據。
當找到第二個匹配項時,該行將輸出,其余行將停止處理。
基本工作流程如下:
或者,如果您不需要包含第二個匹配的行,代碼會變得更簡潔:
(gc file).Where({$_ -match 'first'},'SkipUntil').Where({$_ -match 'second'},'Until')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.