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
任何帮助任何帮助将不胜感激!
答
有些事情要考虑在这里。随着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"
会做的伎俩,我认为,再次假设文化问题不乱您。
在我的电脑上'Get-Date -format d'返回'02.11.2015'。你的文件中是否有与之匹配的行? *注意:'.'是正则表达式的特殊字符,可以匹配任何一个字符。* – PetSerAl