PowerShell在多個檔案中檢索關鍵字

2022-04-07 06:11:27 字數 1017 閱讀 3862

這幾天在看powershell,感覺挺強大的,乙個小任務,是用powershell實現多個檔案中檢索萬行記錄的指令碼。剛開始想用用get-content 結合where-object來實現,發現檢索的結果太慢,而且檢索的條目顯示出來後不知道來自哪個檔案,這個雖然也容易實現,但是經過對多種方法的探索,我發現竟然一條強大的命令竟然可以實現所有這些需求,而且超快的。

一般用於iis日誌分析,由於主要是介紹這個ps命令的,iis日誌是從伺服器端抓取的,這裡僅就是測試用的一半資料。

首先進入到相應目錄,檢視當前目錄下的檔案,其中四個log檔案是用來測試的。如下:

然後就用下面這條命令實現那個強大的功能:

比如要搜尋關鍵字write,則輸入write回車之後,搜尋到的結果如下(僅擷取部分,這裡由於隱私,日誌檔案是俺造的,只是資料量比較大,內容純屬虛構~~):

可以將這條語句賦給乙個臨時變數,來檢視一下在這瞬間查出了多少資料:

其實也不多,4個日誌檔案中瞬間查出了500條資料,其實這個看不出來,因為我造的資料量還不夠大。。。

下面對這條強大的命令簡單解釋下:

整體其實就是使用了select-string這個命令,具體用法參考:

get-childitem是得到當前面目錄下的所有項,然後通過管道| 輸入給?(就是where-object的別名)來篩選,及篩選當前目錄下的log檔案,$_代表當前物件,即前面查出的結果,-like使用了模式匹配,$(read-host)是從控制台讀入,類似c#中的readline()(相應的標準輸出是write-host),即當使用者輸入乙個關鍵字後,命令會從後向前的執行。

由於是剛入門,如有出錯,大神們多多指教。

在Powershell批量重新命名檔案

get childitem png rename item newname分析 get childitem png 是第乙個命令,這個命令的輸出,將通過管道 管道符 輸出給第二個命令。管道是程序間通訊的一種手段 第二個命令 rename item 進行重新命名,它會逐個接受前乙個命令裡的每乙個檔案資...

Powershell檢測並啟動多個服務

恢復powershell的預設執行策略,預設不允許執行任何指令碼 set executionpolicy default force 設定powershell的執行策略為,可以執行任何指令碼 set executionpolicy unrestricted force 定義乙個傳送郵件的函式send...

在matlab裡讀取多個檔案

在乙個matlab的學習群裡,有人提出了這麼乙個問題 在matlab裡如何讀取多信檔案的資料,例如,有許多資料,存放在不同的txt檔案裡。我的辦法是把這些檔案的檔名按一定的規律命名,假如有一百個資料檔案,則可以把這些檔案分別命名為 filename1.txt,filename2.txt,fielna...