Powershell字符串搜索

问题描述:

我想在文件中搜索关键字/模式匹配,其中行将以日期开始。 线会像下面Powershell字符串搜索

11/02/15 02:28:49%%PROGRAM$$SUCCESS$$End. 

所以我试图用下面的命令,

Select-String -Path C:\Path\To\File.txt -Pattern $(Get-Date -format d) | Select-String -Pattern SUCCESS 

,这样我可以得到包含SUCCESS与当前日期的起始线。

它在我的测试盒上工作,当我在一个大文件(〜200 MB)上尝试时,它没有给出任何结果。也试过下面,

Get-Content -Path C:\Path\To\File.txt | Select-String -Pattern $(Get-Date -format d) | Select-String -Pattern SUCCESS 

任何帮助任何帮助将不胜感激!

+0

在我的电脑上'Get-Date -format d'返回'02.11.2015'。你的文件中是否有与之匹配的行? *注意:'.'是正则表达式的特殊字符,可以匹配任何一个字符。* – PetSerAl

有些事情要考虑在这里。随着PetSerAl的发布,Get-Date -Format d取决于文化,所以你需要小心依赖的输出。

如果您正在搜索的文件是使用Get-Date -Format d生成的,那么只要文件总是在与其生成的文化相同的计算机上搜索,那么以这种方式进行搜索是有意义的。

顺便说一句,在我的机器上它的11/2/2015不是11/02/15,我在美国。

此外,当您使用Select-String -Pattern这是一个正则表达式,所以您需要确保字符串中没有特殊字符。在PetSerAl日期的情况下,点.将被解释为特殊字符。为了避免使用[RegEx]::Escape()

Select-String返回一个匹配对象(或多个对象),因此将其直接连接到另一个Select-String可能无法工作。考虑制作一个模式。

这里只是一个猜测,但它看起来像你想要的模式是匹配行的开头的当前日期字符串,然后在该行后面的任何地方找到SUCCESS

我认为,你可以使用这样的模式:11/02/15.+?SUCCESS

所以这样的代码:

Get-Content -Path C:\Path\To\File.txt | Select-String -Pattern "$([RegEx]::Escape((Get-Date -Format d))).+?SUCCESS" 

会做的伎俩,我认为,再次假设文化问题不乱您。