0

我正在尝试使用以下格式解析文本文件:

\\fileshare40\abccheck\logons\ABC64ZXZ.txt:5398:UserID:  abcusernamehere Logged:  09:18:36 2014/03/13
\\fileshare40\abccheck\logons\ABC63BZB.txt:5403:UserID:  abcusernamehere Logged:  01:21:31 2014/03/14
\\fileshare40\abccheck\logons\ABC61ZSF.txt:5408:UserID:  abcusernamehere Logged:  08:22:31 2014/03/17
\\fileshare40\abccheck\logons\ABC62ETB.txt:5413:UserID:  abcusernamehere Logged:  07:58:52 2014/03/18
\\fileshare40\abccheck\logons\ABC60BBB.txt:5418:UserID:  abcusernamehere Logged:  13:11:36 2014/03/19

我唯一需要的是机器名称(ABC *****)。稍后我会将它放入一个数组中,看看是否有重复项,但这里的答案会让我开始走这条路。

我试过这个:

$abc = select-string -path c:\users\abcusernamehere\desktop\findusermachines.txt -pattern "TCWS....." -allmatches

但是这样做会显示该文件中的整行文本。我怎样才能打破线路只查找并显示我正在搜索的内容?

4

3 回答 3

1

为此,您可以使用正则表达式:

(get-content c:\users\abcusernamehere\desktop\findusermachines.txt) -replace '.+\\(.+?)\.txt:.+','$1'

ABC64ZXZ
ABC63BZB
ABC61ZSF
ABC62ETB
ABC60BBB

如果它们都有服务器名称,那么使用 Select-String 搜索具有服务器名称的行确实没有意义。只需使用 Get-Content,然后对所有行运行 -replace 运算符。

于 2014-04-01T20:31:44.857 回答
0

您可以通过正则表达式匹配来做到这一点。

[regex]::Matches((gc c:\users\abcusernamehere\desktop\findusermachines.txt),"ABC.....")|select -ExpandProperty value

这回吐:

ABC64ZXZ
ABC63BZB
ABC61ZSF
ABC62ETB
ABC60BBB
于 2014-04-01T20:31:56.453 回答
0

还有另一个答案:-)

${c:\users\abcusernamehere\desktop\findusermachines.txt } | ? { $_ -cmatch "\b(?<MACHINE>ABC.+)\b.txt" }  | % { $Matches['MACHINE'] }

ABC64ZXZ
ABC63BZB
ABC61ZSF
ABC62ETB
ABC60BBB

于 2014-04-01T20:55:23.767 回答