错误的原因match
是比较运算符,而不是 cmdlet:
比较运算符让您可以指定比较值和查找与指定模式匹配的值的条件。要使用比较运算符,请指定要与
分隔这些值的运算符一起比较的值。
还:
匹配运算符(-Match 和 -NotMatch)使用正则表达式查找匹配或不匹配指定模式的元素。
语法是:
<string[]> -Match <regular-expression>
<string[]> -NotMatch <regular-expression>
以下示例显示了 -Match 运算符的一些用法:
PS C:\> "Windows", "PowerShell" -Match ".shell"
PowerShell
PS C:\> (Get-Command Get-Member -Syntax) -Match "-view"
True
PS C:\> (Get-Command Get-Member -Syntax) -NotMatch "-path"
True
PS C:\> (Get-Content Servers.txt) -Match "^Server\d\d"
Server01
Server02
匹配运算符仅在字符串中搜索。他们不能在整数数组或其他对象中搜索。
所以,正确的语法是:
@(type output.tmp) -match "^-[-|]*-.$" > output.csv
注意:正如@mjolinor 建议的那样,@
前缀强制将(type output.tmp)
放入数组中,以防输入文件仅包含一行。