在powershell中的一个匹配之后和不同匹配之前打印行
我想在一些比赛之后和其他不同的比赛之前打印一些行 使用awk,我是这样做的:在powershell中的一个匹配之后和不同匹配之前打印行,powershell,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') {
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()
方法支持表达式和模式。由脚本块{}
表示的表达式针对每个管道对象执行。如果您的输入是一个数组,$\uu
将包含每行的内容
-match
默认情况下执行不区分大小写的正则表达式匹配
模式SkipUntil
表示在表达式为真之前不要输出任何内容。然后继续输出,直到处理完所有数据
当找到第二个匹配项时,该行将输出,其余行将停止处理
基本工作流程如下所示:
$content.Where({$_ -match 'first'},'SkipUntil') | Foreach-Object {
if ($_ -match 'second') {
$_; break
}
else {
$_
}
}
或者,如果不需要包含第二个匹配行,代码将变得更简洁:
(gc file).Where({$_ -match 'first'},'SkipUntil').Where({$_ -match 'second'},'Until')
使用
gc$file-Raw
读取中的文件,然后首先使用-match'(?s).*?秒'
。您需要调整它以获得多个匹配项。此代码在第一个匹配项之前都有效,但我需要文件中的所有这些匹配项。文件的结构如下:第一个匹配bla bla bla bla bla bla第二个匹配第一个匹配ololol ololol第二个匹配