我需要這些命令來檢查Windows上的日誌文件,但我不安裝任何程序,並且我喜歡Windows中的Powershell。在Powershell中如何做head,tail,more,less,sed?
回答
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)。
more.exe
在Windows上存在,端口less
很容易找到(和PowerShell Community Extensions,PSCX,包括一個)。
PowerShell並沒有提供任何替代方案來分離程序,但對於結構化數據Out-Grid
可能會有所幫助。
Head
和Tail
都可以分別使用-First
和-Last
參數Select-Object
仿效。
Sed
功能都可用,但結構相當不同。過濾選項可在Where-Object
(或通過Foreach-Object
和某些州的範圍)。其他轉換操作可以使用Select-Object
和Foreach-Object
完成。
但是,PowerShell傳遞(.NET)對象 - 以及它們的所有類型結構,例如。日期仍然是DateTime
實例 - 而不僅僅是字符串,每個命令都需要自己解析,大部分sed
和其他此類程序都是多餘的。
如果您需要在Windows上查詢大型(或小型)日誌文件,我發現的最佳工具是Microsoft的免費Log Parser 2.2。如果你願意,你可以從PowerShell中調用它,它會爲你做所有的繁重工作,而且速度也非常快。
無論如何,我的環境是Win2k8R2這是不是在Log Parser2.2的系統要求 – 2012-03-15 07:37:15
我得到了一些更好的解決方案:
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
下面是內置的方式做head
和tail
。不要使用管道,因爲如果你有一個大文件,它會非常緩慢。即使對於大型文件,使用這些內置選項也將非常快速。
gc log.txt -head 10
gc log.txt -tail 10
gc log.txt -tail 10 -wait # equivalent to tail -f
但[喬伊的評論](https://stackoverflow.com/questions/9682024/how-to-do-what-head-tail-更少的sed-do-in-powershell#comment60271566_9682594)似乎表明了完全相反!我如何知道誰該信任或哪個(內置)方法最有效? – 2017-09-22 18:53:21
@NH我的回答與喬伊的評論一致。他的評論說:「最近很慢......這就是Get-Content -Tail存在的原因。」 '| select -last'使用管道。我正在使用沒有管道的'-tail'。但是如果你發現兩個相互矛盾的答案,你可能會相信這個聲譽更高的人。此外,您可以簡單地在大文件上嘗試這兩種方法。在一個大文件上這將是非常明顯的。 – wisbucky 2017-09-25 04:32:55
明白了。對不起,我第一次看帖子時一定很困惑。 – 2017-09-25 12:59:19
- 1. 在SQL中使用'more','less'
- 2. Powershell中'more'或'less'命令的等價物?
- 3. 在jQuery中切換Less/More按鈕
- 4. ++,last&init快於:,head&tail?
- 5. Jquery More Less或更少
- 6. 如何創建帶有Read More/Read Less的段落(標籤中)?
- 7. 在很多變量中存在NA的head()和tail()
- 8. 在Shell中結合history,tail和sed命令
- 9. 是否可以在HTML <head>中聲明LESS變量?
- 10. 如何做一個.less mixin在css中生成一些網格?
- 11. 等效於tail -f output \ worker * .log在Powershell中
- 12. 如何使用Swift 3設置標籤高度來自動調整Read More/Less?
- 13. Grep和SED在PowerShell中不工作
- 14. tail和less命令沒有實時監視文件
- 15. 用「Read More」和「Read Less」截斷帶JavaScript的文本
- 16. 使用「head」和「tail」組合顯示Unix中文件的中間行
- 17. 如何做多個模式與SED
- 18. 如何在html中創建只需要錨點的see-more/Read-more功能?
- 19. sed - 如何做正則表達式組使用sed
- 20. 唧唧to same more more more single single single single single single single single single single single more more??
- 21. Bash編程:如何在不同的「shell」中運行程序,類似於CLI命令more | less等
- 22. 如何使用`tail`用`timeout`在bash
- 23. 重做 「GIT中重置--hard HEAD ^」 命令
- 24. 在C++中實現「tail -f」
- 25. 在Perl中模擬tail -f
- 26. 如何在sed
- 27. 如何在SED
- 28. windows phone 8 longlistselector selectmore more more
- 29. 如何從powershell控制檯查看日誌文件? (即powershell等於'less')
- 30. 如何在<head>
日誌文件太大,大約幾MB字節。通過notepad.exe查看太難了。 – 2012-03-13 10:16:32
如果你使用'記事本'作爲你的基礎,我會建議尋找替代文本編輯器,有很多(免費和付費)的選擇。所有優於記事本(雖然這不是一個挑戰)。 – Richard 2012-03-13 11:34:11
[PowerShell vs. Unix Shell]的可能重複(http://stackoverflow.com/questions/573623/powershell-vs-unix-shell) – manojlds 2012-03-13 16:17:01