我正在尝试过滤包含用户帐户的文件中的服务帐户,每行一个:
"svc.test"
"test.user"
"test.user2"
Select-String 添加了不需要的元数据:
C:\Output> select-string -Path C:\Output\tmp.csv 'svc' -NotMatch
tmp.csv:415:"test.user"
tmp.csv:416:"test.user2"
我只是想:
"test.user"
"test.user2"
我该怎么做呢?
--- 更新 --- 这是 Get-Member cmdlet 的结果:
PS C:\Output> select-string -Path C:\Output\tmp.csv 'svc' -NotMatch|get-member
TypeName: Microsoft.PowerShell.Commands.MatchInfo
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
RelativePath Method string RelativePath(string directory)
ToString Method string ToString(), string ToString(string directory)
Context Property Microsoft.PowerShell.Commands.MatchInfoContext Context {get;set;}
Filename Property string Filename {get;}
IgnoreCase Property bool IgnoreCase {get;set;}
Line Property string Line {get;set;}
LineNumber Property int LineNumber {get;set;}
Matches Property System.Text.RegularExpressions.Match[] Matches {get;set;}
Path Property string Path {get;set;}
Pattern Property string Pattern {get;set;}
我需要数据。如何将线属性数据输出到文件?
答案1
这是做事的一种方法。[咧嘴笑] Select-String
cmdlet 总是包含大量元数据以及匹配项。对象类型是matchinfo
,不是string
,因此您需要获取价值您想要的...在这种情况下,该值包含在.Line
对象的属性中。
代码的作用是什么……
- 设置要使用的文件名
- 创建要排除的项目列表
- 创建一个正则表达式或该列表的
cmdletS-S
默认使用-Pattern
参数进行匹配...并使用正则表达式模式。 - 创建一个要使用的文件
- 使用
Select-String
文件作为输入、正则表达式模式和-NotMatch
开关参数来反转匹配 .Line
获取每个对象的属性值- 将其发送到
$Result
收藏夹 - 在屏幕上显示该集合
代码 ...
$FileName = "$env:TEMP\wirelessben_S-S_Demo.txt"
$ExcludeList = @(
'line'
'five'
'seven'
)
$RegexEL = $ExcludeList -join '|'
#region >>> create a file to work with
@'
the first line
2nd line, this one is
a third line
the fourth goes forth
one, two, five ... THREE sir!
the number of this line is six
seven
eight
number nine, number nine
'@ | Set-Content -LiteralPath $FileName
#endregion >>> create a file to work with
$Result = (Select-String -LiteralPath $FileName -Pattern $RegexEL -NotMatch).Line
$Result
输出 ...
the fourth goes forth
eight
number nine, number nine
请注意,任何包含line
、five
或的行seven
都会被排除。