首先搜索一行"x"字符数,然后输出整行



我有一个文本文件,该文件最多包含以下格式的1000行数据:

14410:3012669|EU14410|20/01/2017||||1|6|4|OUT FROM UNDER||22/02/2017 04:01:47|22/02/2017 21:19:52
14:3012670|EU016271751|20/01/2017||||2|6|4|BLOCK BET|\acis-prodPicturesEntryEU01627.jpg|22/02/2017 04:02:02|22/02/2017 21:19:52
301111:3012671|EU016275|20/01/2017||||2|6|4|VITAE MEDICAL CLINIC|\tm-prodPicturesEntryEU01.jpg|22/02/2017 04:02:11|22/02/2017 21:19:53

每行将以以下格式开始

"set of characters up to max of 8":"set of characters unlimited max"

我只想在第一个结肠之前搜索角色。这些字符可以包含最多最多8的任何数量。返回整个行。仍然是PowerShell的新手,所以我只尝试了一个简单的选择:

$path = "C:UsersMEDesktopacsep22acsnic-20170222_233324.done"
Get-ChildItem $path -recurse | Select-String -pattern ("14410","3011981","3011982",) | out-file $logfile |format-list 

哪个有效 - 但我没有考虑到字符串也可以在同一行中出现两次(尽管与前7个字符无关)

例如:

14410:3012669|EU14410|

包含两次14410,它们与其意义无关,我只想根据第一个数字搜索和返回

有人可以帮助我实现这一目标,还是可以向我迈向有帮助的CMDLET?

我已经在线尝试了各种搜索(以及通过Microsoft在线资源),但是很多结果与"返回第一个x字符"而不是"仅使用第一个x量和返回行"而不是"搜索"

善意

您可以使用简单的Where-Object过滤器检查:之前的字符串是否是您期望的字符串之一:

$strings = '14410','3011981','3011982'
Get-Content $path |Where-Object {$strings -contains ($_ -split ':')[0]}

这可能是最大的挥发物 - 偶像方法。


如果要使用Select-String,则必须构造一个将以一个符合的弦上匹配的正则表达式,然后以一个字符串开始,然后是一个结肠:

$strings = '14410','3011981','3011982'
$pattern = '^(?:{0}):' -f ($strings -join '|') # pattern is now '^(?:14410|3011981|3011982):' 
Select-String -Path $path -Pattern $pattern 

如果您只想从输出中裸字符串本身,请从 Select-String返回的对象中获取 Line属性:

Select-String -Path $path -Pattern $pattern |Select-Object -Expand Line

Select-String -Path $path -Pattern $pattern |ForEach-Object Line

上面的模式使用非捕捉组(?:pattern-goes-here)与字符串的开始^匹配任何一个字符串,然后是:

两种解决方案都将与任意数量的字符串

一起使用

最新更新