我试图从一个文件中解析出模式,并搜索这些字符串,然后对它们进行分组。这是我得到的代码和错误
PS D:\Shared_With_Pai\Testing> Get-Content C:\\events.txt | Select-String -pattern $_ * |Select-Object LineNumber,FileName|Format-Table -GroupBy FileName
Select-String : Cannot bind argument to parameter 'Pattern' because it is null.
At line:1 char:52
+ Get-Content C:\\events.txt | Select-String -pattern <<<< $_ * |Select-Object LineNumber,FileName|Format-Table -GroupBy FileName
+ CategoryInfo : InvalidData: (:) [Select-String], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.SelectStrin
gCommand有人能说出我在哪里犯的错误吗?
编辑: events.txt的内容类似于
8,coilevent,networkchange
8,coilevent,malfunction
8,coilevent,conflictwithpc我正在为这些行搜索一些csv文件。
发布于 2014-03-24 10:45:25
如果您以这种方式使用当前对象变量$_,则不会填充管道中的对象。正如@Kayasax建议的那样,如果您想让语句像这样工作,就需要将它放在循环中:
Get-Content C:\events.txt | % { Select-String -Pattern $_ * } | ...但是,不需要首先读取管道的输入。-Pattern接受一个字符串数组,因此您可以简单地使用子表达式中的模式读取文件:
Select-String -Pattern (Get-Content 'C:\events.txt') * | ...发布于 2014-03-24 10:20:01
我认为您正在寻找类似的选项(请注意,select字符串别名sls只适用于powershell V3 ):
$patterns=gc c:\temp\events.txt
ls c:\temp\*.csv |%{
sls -Pattern $patterns $_ |Select-Object LineNumber,FileName|Format-Table -GroupBy FileName
} 发布于 2014-03-24 11:00:54
Select-String期待一个模式的正则表达式参数。这是:
Get-Content C:\\events.txt | Select-String -pattern $_ * 获取文件的内容,并将其用作管道数据和匹配参数--每一行都与自身匹配。这毫无意义。
然后,尾随*将被读取为一个位置参数的参数。
阅读select-string上的帮助,并查看
get-help about_regular_expressions在考虑了@Ansgar的评论之后,您可能可以使用以下内容:
gci | sls -Pattern (gc c:\temp\events.txt) -SimpleMatch-Pattern参数将不接受管道输入,但它将接受一个模式参数数组,并将返回数组中任何模式的匹配,因此您不需要使用foreach-object来迭代该数组。
https://stackoverflow.com/questions/22604448
复制相似问题