2012-03-13 66 views
57

我需要這些命令來檢查Windows上的日誌文件,但我不安裝任何程序,並且我喜歡Windows中的Powershell。在Powershell中如何做head,tail,more,less,sed?

+0

日誌文件太大,大約幾MB字節。通過notepad.exe查看太難了。 – 2012-03-13 10:16:32

+0

如果你使用'記事本'作爲你的基礎,我會建議尋找替代文本編輯器,有很多(免費和付費)的選擇。所有優於記事本(雖然這不是一個挑戰)。 – Richard 2012-03-13 11:34:11

+0

[PowerShell vs. Unix Shell]的可能重複(http://stackoverflow.com/questions/573623/powershell-vs-unix-shell) – manojlds 2012-03-13 16:17:01

回答

90

Get-Content(別名:gc)是您閱讀文本文件的常用選項。然後,您可以進一步篩選:

gc log.txt | select -first 10 # head 
gc -TotalCount 10 log.txt  # also head 
gc log.txt | select -last 10 # tail 
gc -Tail 10 log.txt   # also tail (since PSv3), also much faster than above option 
gc log.txt | more    # or less if you have it installed 
gc log.txt | %{ $_ -replace '\d+', '($0)' }   # sed 

此作品不夠好小文件,較大的(超過幾個MIB)可能有點慢。

PowerShell Community Extensions包含一些用於專門文件的小命令(例如Get-FileTail)。

+0

謝謝,對我很有幫助。 – 2012-03-15 08:10:05

+1

聖牛,這是最大限度地讓我的CPU做一個1GB的CSV'-last 2'。熱飲料:☕ – mlissner 2013-02-19 19:28:49

+6

@mlissner:如果您使用的是PowerShell v3,則可以使用「Get-Content -Tail 2」。這絕對是更快。 – Joey 2013-02-20 07:56:52

6

more.exe在Windows上存在,端口less很容易找到(和PowerShell Community Extensions,PSCX,包括一個)。

PowerShell並沒有提供任何替代方案來分離程序,但對於結構化數據Out-Grid可能會有所幫助。

HeadTail都可以分別使用-First-Last參數Select-Object仿效。

Sed功能都可用,但結構相當不同。過濾選項可在Where-Object(或通過Foreach-Object和某些州的範圍)。其他轉換操作可以使用Select-ObjectForeach-Object完成。

但是,PowerShell傳遞(.NET)對象 - 以及它們的所有類型結構,例如。日期仍然是DateTime實例 - 而不僅僅是字符串,每個命令都需要自己解析,大部分sed和其他此類程序都是多餘的。

1

如果您需要在Windows上查詢大型(或小型)日誌文件,我發現的最佳工具是Microsoft的免費Log Parser 2.2。如果你願意,你可以從PowerShell中調用它,它會爲你做所有的繁重工作,而且速度也非常快。

+0

無論如何,我的環境是Win2k8R2這是不是在Log Parser2.2的系統要求 – 2012-03-15 07:37:15

0

我得到了一些更好的解決方案:

gc log.txt -ReadCount 5 | %{$_;throw "pipeline end!"} # head 
gc log.txt | %{$num=0;}{$num++;"$num $_"}    # cat -n 
gc log.txt | %{$num=0;}{$num++; if($num -gt 2 -and $num -lt 7){"$num $_"}} # sed 
15

下面是內置的方式做headtail。不要使用管道,因爲如果你有一個大文件,它會非常緩慢。即使對於大型文件,使用這些內置選項也將非常快速。

gc log.txt -head 10 
gc log.txt -tail 10 
gc log.txt -tail 10 -wait # equivalent to tail -f 
+0

但[喬伊的評論](https://stackoverflow.com/questions/9682024/how-to-do-what-head-tail-更少的sed-do-in-powershell#comment60271566_9682594)似乎表明了完全相反!我如何知道誰該信任或哪個(內置)方法最有效? – 2017-09-22 18:53:21

+1

@NH我的回答與喬伊的評論一致。他的評論說:「最近很慢......這就是Get-Content -Tail存在的原因。」 '| select -last'使用管道。我正在使用沒有管道的'-tail'。但是如果你發現兩個相互矛盾的答案,你可能會相信這個聲譽更高的人。此外,您可以簡單地在大文件上嘗試這兩種方法。在一個大文件上這將是非常明顯的。 – wisbucky 2017-09-25 04:32:55

+0

明白了。對不起,我第一次看帖子時一定很困惑。 – 2017-09-25 12:59:19

相關問題