2015-11-02 125 views
1

我想在文件中搜索關鍵字/模式匹配,其中行將以日期開始。 線會像下面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

回答

1

有些事情要考慮在這裏。隨着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" 

會做的伎倆,我認爲,再次假設文化問題不亂您。