[英]Delete lines based on time stamp in text file PowerShell
PS的新手在這里,但是我有一個日志文件,其中每個條目都用以下日期格式寫在單獨的行上:2013-04-29 08:55:09,261
我正在嘗試使用PowerShell刪除所有30天以上的行。 我一直在嘗試用某種大於代碼的形式插入get-date -format“ yyyy-MM-dd hh”輸出,但是在這一點上我只是在猜測。 也一直在嘗試使用批處理文件的forfiles,但如果可以的話,我想堅持使用PS。
任何幫助將非常感激。
嘗試這個:
gc .\logfile.txt | %{if ([datetime][regex]::match($_, '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}').Value -gt (Get-Date).AddDays(-30)) {$_}} > purgedlogfile.txt
組件的分解和說明:
.\\logfile.txt
是日志文件的路徑 ^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}
是一個正則表達式,與每行開頭的日志文件的時間戳格式匹配 [regex]::match($_, '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}').Value
返回正則表達式匹配的時間戳 [datetime]
typecast運算符之前將其轉換為DateTime對象(以便將其與另一個DateTime比較) (Get-Date)
返回代表當前日期和時間的DateTime對象, .AddDays(-30)
從中減去30天,以返回代表30天之前的DateTime對象 if
代表該行時間戳的DateTime大於代表30天之前的DateTime(即,時間戳比30天更近),則if
塊將打印該行,否則它將忽略該行 假設文件包含以下內容:
2013-04-29 08:55:09,261 line1
2013-01-29 08:55:09,261 line2
2013-03-31 08:55:09,261 line3
對我來說,您的日期采用國際標准日期符號,因此您可以使用:
$a = [datetime]"2013-04-29 08:55:09"
那么$a
將是一個約會,因此與文化無關。
您只需編寫以下內容即可過濾日期中的所有行(此處為“ 2013-03-31”)
get-content "C:\temp\date.txt" | where { [datetime]($_.split(','))[0] -ge "2013-03-31"}
我只是在昏迷上分割了行,進行了比較,將第一部分轉換為日期。
對於您的30天(get-date).date
給出不帶小時的日期,而(get-date).date.adddays(-30)
給出今天之前30天的日期。
get-content C:\temp\date.txt | where { [datetime]($_.split(','))[0] -ge (get-date).date.adddays(-30)}
您可以將結果傳遞到新文件中| set-content "C:\\temp\\newdate.txt"
| set-content "C:\\temp\\newdate.txt"
Adi Inbar的回答很好,但是如果您希望避免使用正則表達式,這是另一種方法:
Get-Content e:\pathto\logfile.txt | Where-Object { ( (Get-Date) - (Get-Date $_.Substring(0,10)) ).Days -le 30} | Add-Content e:\pathto\NewLog.txt
假設文件包含以下內容:
2013-04-29 08:55:09,261 line1
2013-01-29 08:55:09,261 line2
2013-03-31 08:55:09,261 line3
您可以通過以下方式獲得所需的輸出:
$culture = [System.Globalization.CultureInfo]::InvariantCulture
$format = 'yyyy-MM-dd HH:mm:ss,fff'
Get-Content .\test.txt | ? { [datetime]::ParseExact(([string]$_).Substring(0,23), $format, $culture) -ge (Get-Date).AddDays(-30) }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.